Алгоритмическая сложность: почему упорядочивание снижает сложность до O(log n)

Я читаю некоторые тексты об алгоритмической сложности (и я планирую пройти курс алгоритмов позже), но я не понимаю следующее.

Скажем, мне нужно найти элемент в неупорядоченном списке, количество шагов, необходимых для его поиска, будет пропорционально количеству элементов в этом списке. Поиск его в списке из 10 элементов может занять 10 шагов, то же самое для списка из 100 000 элементов может занять 100 000 шагов. Таким образом, алгоритмическая сложность будет линейной, обозначаемой «O (n)».

Теперь этот text[1] говорит мне, что если бы я отсортировал список по какому-то свойству, скажем, номеру социального страхования, алгоритмическая сложность поиска элемента была бы уменьшена до O(log n), что намного быстрее, off курс. Теперь я вижу, что это происходит в случае B-дерева, но как это применимо к списку? Я неправильно понимаю текст, ведь английский не мой родной язык?

[1]http://msdn.microsoft.com/en-us/library/ms379571.aspx


person Oxymoron    schedule 27.05.2011    source источник


Ответы (2)


Это работает для любого произвольно доступного контейнера. В случае списка вы должны сначала перейти к среднему элементу. Предполагая, что это не цель, порядок сообщает вам, будет ли цель находиться в верхнем подсписке или в нижнем подсписке. По сути, это превращается в бинарный поиск, ничем не отличающийся от поиска по b-дереву.

person mah    schedule 27.05.2011
comment
Ладно, тогда я правильно понял, я немного запутался. В тексте еще не упоминались b-деревья, поэтому мне было интересно, правильно ли я понял. Ваше здоровье. - person Oxymoron; 27.05.2011

Двоичный поиск, отметьте середину, если цель выше, она должна находиться справа, если меньше, то среднее число и так далее. Каждый раз, когда вы делите список на две части, у вас остается O (log n)

person Jesus Ramos    schedule 27.05.2011