后台-插件-广告管理-内容页广告位一(手机)

您现在的位置是:首页 > 开发类 > 问答问答

请教一个数据结构

2021-07-06 20:27:30问答人已围观

简介 <P>我向某个数据结构中随机加入以下一组3,1,4,5,数据,使得其排序为升序,</P>
<P>如果我再加入一个数据2,该结构马上在内部排序为1,2,3,4,5,也就是说加入的数据,立刻找

<P>我向某个数据结构中随机加入以下一组3,1,4,5,数据,使得其排序为升序,</P> <P>如果我再加入一个数据2,该结构马上在内部排序为1,2,3,4,5,也就是说加入的数据,立刻找到自己的位置,</P> <P>以便于我在</P> <P>while(list.count!=0)</P> <P>{</P> <P>&nbsp;&nbsp;&nbsp; list[0]总是最小的数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</P> <P>}</P> <P>感觉这个思路很糟糕,我的具体应用场景如下,在前面一贴,讨论过的合并数据问题,我想实现,</P> <P>当两个文件的大小(KB)小于某个设定值时,两个文件就合并,这样一直合并下去,</P> <P>因此我想到的策略是,取出文件的大小和文件名,按文件大小升序排列,将符合要求的文件合并,并将这些文件从队列中去除,加新生成的文件加入,这就要求有个自动的排序的要求了,</P> <P>&nbsp;</P> <P>高手来说说&nbsp;</P> <P>&nbsp;</P> <P>&nbsp;</P>

最佳答案:1、如果只需要list[0]是最值点,堆就再好不过了,O(logN)的时间插入,实现也很简单,但是缺点就是只有list[0]是最值点。 2、如果需要每个元素都有序,只有线性表了,每次插入元素先二分查找,然后插入之,时间复杂度是O(logN+N) 如Gray Zhang朋友所说,SortedList可以达到第二种功能。 至于LZ的实例,我觉得可以这样实现: 将所有文件建立一个小顶堆(堆顶总是最小元素),和一个缓冲区; 设缓冲区里总文件大小是buffer,堆顶文件大小是top; 如果buffer + top <= max_file_size,就把top弹出到buffer,并且维护堆(下文中凡是涉及到堆的操作后都必须维护堆); 如果buffer + top > max_file_size,就把当前的buffer全部合并,然后压入堆; 知道buffer为空,且top > max_file_size的时候,说明合并完毕。 这里的堆就是优先队列 总体时间复杂度为O(N*logN)

文章来源:https://q.cnblogs.com/q/2630/

Tags:.net技术 c 

很赞哦! ()

后台-插件-广告管理-内容页广告位二(手机)

相关文章

后台-插件-广告管理-内容页广告位三(手机)
后台-插件-广告管理-内容页广告位四(手机)

文章评论

留言与评论(共有 0 条评论)
   
验证码:

本栏推荐

站点信息

  • 文章统计90209篇文章
  • 浏览统计10086次浏览
  • 评论统计1个评论
  • 标签管理标签云
  • 统计数据:统计代码
  • 微信公众号:扫描二维码,关注我们