【发布时间】:2019-01-03 18:36:36
【问题描述】:
所以,我对编程和计算机科学非常陌生,并且在解决我的代码时一直在尝试理解时间复杂度的概念。但是,在对数组进行排序时,我总是对一些事情感到困惑: 在我的理解中,用排序数组解决问题应该是最好的情况复杂性,而未排序的数组将有最坏的情况。 我总是感到困惑的是,在涉及搜索的问题中,我们如何真正利用正在排序的数组?意思是,这将如何降低我的时间复杂度,因为我认为我必须运行相同次数的循环。
例如,如果我有一个数组并且想要找到两个索引,其值加起来等于一个特定的目标,如果数组是排序的还是未排序的,时间复杂度会有所不同吗?
提前感谢您帮助我。
【问题讨论】:
-
如果数组已排序,则可以根据问题有时使用binary search 或其他利用此结构的算法。对于您的示例,yes 这会有所不同,因为在这里我们可以使用两个“光标”:一个向前移动,一个向后移动。
-
也许你对“排序”的想法过于严格了。如果您的问题是找到两个值加起来为 100 的索引,那么“排序”数组可能是
[40, 60, 1, 200, 9, 83, 17] -
答案并不总是显而易见的,请参阅传奇:Why is it faster to process a sorted array than an unsorted array? 但要回到您搜索排序数据的问题,您无需查看所有数组元素,只需在少数 ... 使用二进制搜索在
n数字上只有log2(n)峰值而不是n所以不,你没有相同数量的迭代......如果你得到半排序数组(连续)数据,即使这样也可以像How approximation search works
标签: python-3.x algorithm sorting