我正在考虑创建软件,根据指定的要求和最佳拟合算法生成所有可能的排序算法。您为该软件指定了哪些实际要求?你会如何指定它们。
我的建议是:
getSortingAlgorithm(int memorySize, int timeConstraintInMillisec);
//getSortingAlgorithm("O(n)", "O(n*log(n))");
getSortingAlgorithm(AssymptomaticConstaint memoryConstraint, AssymptomaticConstaint timeConstraint);
任何其他强化,缓解这些限制的想法?
答案 0 :(得分:0)
元素数量和缓存的大小/类型也可能是一种结论,以便优化排序的缓存性能。
也是一个布尔值,表示元素是否具有 int值,因为整数排序不限于基于比较的算法。
要使用的线程数也可能是个问题:尝试在您的库中制作并行算法。
答案 1 :(得分:0)
你也可以有稳定/不稳定的参数。
例如冒泡排序和选择排序都有时间复杂度:O(n2),内存:O(1)
答案 2 :(得分:0)
优化速度与存储。
重新存储,限制最大存储空间并使用“后备存储”文件(“chunked”排序)。
维护相同项目的订单(或不)。
索引排序?
稳定性与最佳平均速度相比,利用“几乎排序”的数据集。
数据集的大小 - 对于较小的数据集,设置较少的简单排序更好。
键的大小 - 这会影响使用的数据结构。