Каково различие между Линейным поисковым и Двоичным поиском?

Не уверен, что mdadm никогда не использовал его, но использовал статью ниже, чтобы успешно изменить размер диска с данными.

https://docs.microsoft.com/en-us/azure/virtual-machines/linux/expand-disks#expand-a-disk-partition-and-filesystem

[ 114] Попробуйте и посмотрите, работает ли он для вас.

42
задан Luuklag 19 July 2019 в 07:31
поделиться

8 ответов

Линейный поиск смотрит вниз список, один объект за один раз, без перехода. В терминах сложности это O(n) поиск - время, потраченное для поиска списка, становится больше на том же уровне, как список делает.

Двоичный поиск состоит в том, когда Вы запускаете с середины отсортированного списка и видите, больше ли это, чем или меньше, чем значение, которое Вы ищете, который определяет, является ли значение в первой или второй половине списка. Переход к половине пути через подсписок, и выдерживает сравнение снова и т.д. Это в значительной степени, как люди обычно ищут слово в словаре (хотя мы используем лучшую эвристику, очевидно - если Вы ищете "кошку", Вы не начинаетесь в "M"). В терминах сложности это O(log n) поиск - количество операций поиска растет более медленно, чем список, потому что Вы делите на два "пространство поиска" с каждой операцией.

Как пример, предположите поиск U в списке A-Z букв (индекс 0-25; мы ищем значение в индексе 20).

Линейный поиск спросил бы:

list[0] == 'U'? Нет.
list[1] == 'U'? Нет.
list[2] == 'U'? Нет.
list[3] == 'U'? Нет.
list[4] == 'U'? Нет.
list[5] == 'U'? Нет.
... list[20] == 'U'? Да. Законченный.

Двоичный поиск спросил бы:

Выдержать сравнение list[12] ('M') с 'U': Меньший, посмотрите далее на. (Range=13-25)
Выдержать сравнение list[19] ('T') с 'U': Меньший, посмотрите далее на. (Range=20-25)
Выдержать сравнение list[22] ('W') с 'U': Больше, посмотрите ранее. (Range=20-21)
Выдержать сравнение list[20] ('U') с 'U': Найденный им! Законченный.

Сравнение двух:

  • Двоичный поиск требует, чтобы входные данные были отсортированы; линейный поиск не делает
  • Двоичный поиск требует сравнения упорядочивания; линейный поиск только требует сравнений равенства
  • Двоичный поиск имеет сложность O (зарегистрируйте n); линейный поиск имеет сложность O (n), как обсуждено ранее
  • Двоичный поиск требует произвольного доступа к данным; линейный поиск только требует последовательного доступа (это может быть очень важно - это означает, что линейный поиск может передать данные потоком произвольного размера),
113
ответ дан Jon Skeet 26 November 2019 в 23:12
поделиться

Линейный поиск запускается в начале списка значений и проверяет 1 на 1 для результата, который Вы ищете.

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

5
ответ дан jthompson 26 November 2019 в 23:12
поделиться

Думайте о нем как о двух различных способах найти Ваш путь в телефонной книге. Линейный поиск запускается вначале, читая каждое имя, пока Вы не находите то, что Вы ищете. Двоичный поиск, с другой стороны, состоит в том, когда Вы открываете книгу (обычно в середине), смотрите на имя сверху страницы и решаете, больше ли имя, которое Вы ищете, или меньше, чем то, Вы ищете. Если имя, которое Вы ищете, больше, то Вы продолжаете искать верхнюю часть книги этим самым способом.

63
ответ дан Mia Clarke 26 November 2019 в 23:12
поделиться

Линейный поиск, также называемый последовательным поиском, смотрит на каждый элемент в последовательности от запуска, чтобы видеть, присутствует ли желаемый элемент в структуре данных. Когда объем данных является небольшим, этот поиск быстр. Его легкое, но необходимая работа находится в пропорции на сумму данных, которые будут искаться. Удвоение числа элементов удвоит время, чтобы искать, если желаемый элемент не будет присутствовать.

Двоичный поиск эффективен для большего массива. В этом мы проверяем средний элемент. Если значение больше, что, что мы ищем, то посмотрите в первой половине; иначе посмотрите во второй половине. Повторите это, пока желаемый объект не будет найден. Таблица должна быть отсортирована для двоичного поиска. Это устраняет половину данных при каждом повторении. Его логарифмическое.

Если у нас есть 1 000 элементов для поиска, двоичный поиск делает приблизительно 10 шагов, линейный поиск 1 000 шагов.

2
ответ дан Prabhu. S 26 November 2019 в 23:12
поделиться

бинарный поиск выполняется за O (logn), тогда как линейный поиск выполняется за O (n), поэтому бинарный поиск имеет лучшую производительность

2
ответ дан 26 November 2019 в 23:12
поделиться

Обдумайте, стоит ли выигрыш от более быстрого двоичного поиска затрат на поддержание сортировки списка (чтобы использовать двоичный поиск). Т.е., если у вас много операций вставки / удаления и только случайный поиск, бинарный поиск может быть в целом медленнее, чем линейный поиск.

5
ответ дан 26 November 2019 в 23:12
поделиться

Попробуйте это: выберите случайное имя «Фамилия, Имя» и найдите его в своей телефонной книге.

1-й раз: начните с начала книги, читая имена, пока не найдете ее или найдите место, где это произошло бы в алфавитном порядке, и обратите внимание, что его там нет.

2-й раз: Откройте книгу на полпути и посмотрите на страницу. Спросите себя, должен ли этот человек быть слева или справа. Какой бы он ни был, возьмите это 1/2 и найдите его середину. Повторяйте эту процедуру до тех пор, пока не найдете страницу, где должна быть запись, а затем примените тот же процесс к столбцам или просто выполните линейный поиск по именам на странице, как и раньше.

Определите время обоих методов и отправьте отчет!

[также подумайте, какой подход лучше, если у вас есть только список имен, а не отсортированный ...]

3
ответ дан 26 November 2019 в 23:12
поделиться

Линейный поиск просматривает список по одному элементу за раз, без перехода. С точки зрения сложности, это поиск O (n) - время, затрачиваемое на поиск в списке, увеличивается с той же скоростью, что и список.

Бинарный поиск - это когда вы начинаете с середины отсортированного списка и видите больше или меньше искомого значения, от которого зависит, находится ли значение в первой или второй половине списка. Перейдите к середине подсписка и сравните снова и т. Д. Это в значительной степени то, как люди обычно ищут слово в словаре (хотя мы, очевидно, используем лучшую эвристику - если вы ищете «кот», вы этого не сделаете. начать с "M"). С точки зрения сложности это поиск за O (log n) - количество поисковых операций растет медленнее, чем список,

2
ответ дан 26 November 2019 в 23:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: