算法复杂度:为什么排序将复杂度降低到Olog n

问题描述

|| 我正在阅读有关算法复杂性的一些文章(并且我打算稍后再学习算法课程),但是我不理解以下内容。 假设我要在无序列表中搜索项目,找到它所需的步骤数将与该列表中的项目数成比例。在10个项目的列表中找到它可能需要10个步骤,对100000个项目的列表进行相同操作可能需要100000个步骤。因此,算法复杂度将是线性的,用\'O(n)\'表示。 现在,这段文字[1]告诉我,如果我要按某种属性(例如社会保险号)对列表进行排序,则找到某项的算法复杂度将降低为O(log n),这要快得多,课程。 现在,我可以看到这是在b树的情况下发生的,但是这如何应用于列表?由于英语不是我的母语,我会误解文本吗? [1] http://msdn.microsoft.com/en-us/library/ms379571.aspx     

解决方法

        这适用于任何可随机访问的容器。对于列表,您将首先转到中间元素。假设不是目标,那么排序会告诉您目标是在上层子列表中还是在下层子列表中。从本质上讲,这变成了二进制搜索,与通过b树进行搜索没有什么不同。     ,        二元搜索,检查中间目标是否更高,它必须位于右侧,如果中间目标更低,则以此类推。每次将列表一分为二时,都会留下O(log n)