【发布时间】:2022-12-03 02:05:16
【问题描述】:
我的目标是编写一个算法来检查未排序的正整数数组是否包含值 x 和 x^2,如果包含则返回它们的索引。 我已经解决了这个问题,建议首先使用归并排序对数组进行排序,然后对 x 执行二进制搜索,然后对 x^2 执行二进制搜索。 然后我写道:“由于二分搜索的最坏情况运行时间为 O(log n),归并排序的最坏情况运行时间为 O(n log n),我们得出结论,该算法的最坏情况运行时间为 O(n记录 n)。”我的理解是否正确,在分析涉及具有不同运行时间的步骤的算法的整体效率时,我们只采用运行时间最长的那个?或者它比这更复杂? 提前致谢!
【问题讨论】:
-
你在声明中遗漏了一个 n,结果是 O(nlogn),是的,理论上你只需要最差的运行时间。实际上,这两个集市可能会以导致不同运行时的方式相互影响。但我认为首先不需要 nlogn 。您不需要搜索也不需要排序,尝试迭代列表一次并始终将 x 和 x^2 添加到以索引为值的 Map 中。在添加之前检查 x 或 x^2 是否已经存在。如果其中任何一个存在,您就找到了匹配项并完成了。上)。如果您的列表可以包含重复项,您需要在地图中跟踪更多信息
-
如果单单排序就已经需要 O( n * logn),那么总体复杂度怎么可能是 O( logn)?
-
我的@derpirscher 打字错误,已在编辑中修复
标签: algorithm sorting time-complexity big-o amortized-analysis