研究人员拥有1亿人的记录数据库。研究人员希望根据其他标准(如星座,出生年份等)研究给定名称的分布,因此希望按名称排序,以后再进行进一步排序。
我应该使用哪种?
一个。选择
B.快速
C.堆
D.插入
E.合并
谢谢!
答案 0 :(得分:6)
自从你亲自到达以来,这不是我的答案,但这里是为了更好的可见性:
O(n^2)
,而不会削减100M项目。更新:与考试相关的建议
我必须承认上面的第2点(按名称保留排序)不是完全清除问题描述。但是,这是一个考试问题,必须有一些方法将选项缩减为一个。只有通过要求稳定的分类才能实现这一点,所以即使措辞不是铁定的,也要求有这样的要求。
这种实践思维方式使得IMHO更容易为某些类型的考试问题找到明确的答案。
答案 1 :(得分:3)
答案 2 :(得分:0)
如果你想获得直方图,我不会对数据进行排序。我会仔细检查计算所有感兴趣组合的所有数据。这是O(N)操作。
首先对数据进行排序不太可能提高速度。这是O(N * log(N))操作。
如果想要对所有记录进行排序,我会将Collection.sort()与自定义比较器一起使用,该比较器包含您需要比较的所有字段。您必须将所有记录加载到内存中,这将占用几GB,但是一旦完成此操作,它应该非常快。
提高速度的唯一方法是过滤标准。如果你这样做,我会创建一个集合,其中包含感兴趣的记录副本并对其进行排序。
答案 3 :(得分:0)
最有效的排序算法,不是传统的算法。
由于你是根据出生年份和星座这样的标准进行排序,我会做一个“堆栈排序”(我刚刚做了)。
它会以这种方式工作。
为每个可能的排序值创建数据结构。让我们以出生年份为例。在出生年份,它可能只有大约100个不同的值。
当你完成每个记录的循环时,你现在有100个数组,每个数组都填充了具有特定出生年份的记录。关于这个的重要部分是你在O(n)时间内完成它,所以它比任何其他排序算法快得多。这也适用于十二生肖等...
在盒子外面思考。当使用可能的值(m)对大数据集(n)进行排序时,该方法非常有用,其中m <&lt;&lt; Ñ
答案 4 :(得分:0)
有人发了一个副本,这将是我的答案。自从我努力输入所有这些内容后,我不妨将其分享给未来的读者。
每种排序算法都有其最佳和最差的用例。这就是我尝试思考它的方式:
显然,这是一个非常简洁的概述。您可以在维基百科上找到更多信息,也可以通过Google搜索找到:“何时使用[在此处插入算法]”
希望有所帮助!