如何获得一个排序数组进行二分查找操作?
Posted
技术标签:
【中文标题】如何获得一个排序数组进行二分查找操作?【英文标题】:How to obtain a sorted array for binary search operation? 【发布时间】:2017-03-14 11:29:20 【问题描述】:我最近学习了二进制搜索.... O(log n) 的时间复杂度给我留下了深刻的印象,但我怀疑要获得排序数组,我必须应用排序操作,即最小值O(nlogn) 复杂度要高得多。
【问题讨论】:
你有什么问题? 我怀疑.....首先要执行二进制搜索,我应该必须获得将采用 nlogn 的排序数组。因此,为了获得任何所需的数字,我可以通过线性搜索比 O(nlogn) 花费 O(n) 时间的数字来获得它 【参考方案1】:如果您有一个未排序的列表(或不保证已排序),则线性搜索是可行的方法。线性搜索是 O(n),而排序是 O(nlog n),这更糟。即使检查列表是否已排序也是 O(n)。
如果您只想搜索一次列表,最好使用线性搜索。如果您要搜索多次,您可能会受益于首先对列表进行排序。为了找出最适合您的具体情况的方法,您必须分析问题。
【讨论】:
【参考方案2】:这个想法是您对列表进行一次排序,并保留结果。随后的搜索是 O(log n)。因此,您在许多搜索中的复杂性是(n log n) + S*log(n)
,其中S
是您将进行的搜索次数。如果您不对数组进行排序,那么您的多次搜索费用为O(S*n)
。
【讨论】:
以上是关于如何获得一个排序数组进行二分查找操作?的主要内容,如果未能解决你的问题,请参考以下文章
算法二分法 ② ( 排序数组中查找目标值 | 二分法的经典写法 | 在排序数组中查找元素的最后一个位置 | 二分法的通用模板 )