栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在显示进度的同时对大型馆藏进行排序

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在显示进度的同时对大型馆藏进行排序

您在这里要小心。您已选择使用一种算法来增量构建排序的数据结构,以便(我接受)您可以显示进度条。但是,这样做时,您选择的排序方法 可能
比最佳排序慢得多。(两种类型都可以,

O(NlogN)
但是性能要比big-O行为更多…)

如果您担心这可能是个问题,请比较使用

TreeMap
和对典型集合进行排序的时间
Collections.sort
。后者的工作方式是将输入集合复制到数组中,对数组进行排序,然后再将其复制回。(它的工作原理最好的,如果在输入集合是一个ArrayList,如果你不需要结果作为可变集合就可以避免使用最终拷贝过来的
Collection.toArray
Arrays.sort
Arrays.asList
代替。)

一种替代方法是使用Comparator对象,该对象跟踪被调用的次数,并使用该对象跟踪排序的进度。您可以利用以下事实:比较器通常会被粗略调用

N*log(N)
,尽管您可能需要根据实际使用的算法1对其进行校准。

顺便说一下,与对插入次数进行计数相比,对比较器的调用进行计数可以更好地指示进度。当您接近完成排序时,您将不会看到进度出现放缓的趋势。

(您将拥有不同的线程来读取和写入计数器,因此您需要考虑同步。声明计数器

volatile
可以正常工作,但会增加内存流量。如果您对进度条感到满意,也可以忽略该问题有时会显示过时的值…具体取决于您的平台等)


1-这有问题。在某些算法中,比较次数可能会根据要排序的数据的初始顺序而急剧变化。对于这种算法,没有办法校准将在“非平均”情况下工作的计数器。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/509081.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号