Рубрики
Без рубрики

Выполнение бинарного поиска в JavaScript и Ruby

Бинарный поиск, пожалуй, является наиболее эффективным средством поиска очень больших данных, чтобы найти ТА … Tagged с помощью программирования, алгоритмов, Ruby, JavaScript.

Бинарный поиск, пожалуй, является наиболее эффективным средством поиска через очень большие данные, чтобы найти целевое значение. Это происходит путем устранения половины данных каждый раз, когда проходит, чтобы найти цель. Например, если бы вы искали через 1–20, чтобы найти 11, как бы вы это сделали? Первая реакция заключается в том, чтобы искать линейно, подсчитывая по 1, пока не найдете 11, вы не заметите, насколько это может быть задача, пока не найдете 1123 000 из 2 000 000 номеров, но вы можете значительно упростить этот процесс, используя бинарный поиск. Если мы хотим найти 11 из 1–20 с использованием бинарного поиска, все, что нам нужно сделать, это получить значение в середине, то есть 10, и мы сравниваем с 10 с нашим целевым значением, поскольку 11 больше 10, мы затем устраняем каждое значение С 10 вниз, затем мы снова получаем среднее значение между 10–20, то есть 15, затем сравниваем с 11, теперь 11 составляет менее 15, поэтому в случае, мы устраняем все значения с 15 вверх, мы продолжаем повторять этот шаг, пока не мы Найдите целевое значение. Опять же, поскольку набор данных (1–20) невелик, мы можем не заметить, как время и усилия по сохранению двоичного поиска могут быть до тех пор, пока вы не найдете очень большой набор данных.

Бинарный поиск становится более эффективным с увеличением данных. Например, нам потребовалось бы гораздо меньше шагов при поиске 1123 000 среди 2 000 000 номеров по сравнению с линейным поиском, чем мы бы искали 11 среди 20 номеров. Давайте запустим псевдокод, чтобы увидеть, сколько шагов потребуется нам, чтобы искать 19 среди 30 чисел;

  • Во -первых, мы установили наши значения по умолчанию MIN и MAX на 0 и массив.
min = 0
max = 29
  • Получите среднее значение значений MIN и MAX и установите его на переменную по вашему выбору, давайте назовем наш поиск. Не забудьте округлить поиск до ближайшего целого числа.
search = (0+29)/2 = 14.5 ~ 15
  • Сравните поиск с целевым значением 19, если, то мы нашли наш ответ, если нет, мы можем продолжить. В этом случае поиск не равен 19.
if search == targetValue
    return search
  • Если поиск меньше, чем TargetValue, мы установили + 1. Поскольку поиск, 15 лет, меньше, чем TargetValue, 19, мы установили наше+1 = 16.
if search < targetValue
    min = search + 1
  • Далее мы пересчитываем нашу переменную поиска, то есть/2.5 ~ 23. Помните, мы всегда собираем поиск.
search = (16+29)/2 = 22.5 ~ 23
  • Сравните поиск, чтобы еще раз нацелиться на значение, как и раньше, если значение поиска просто возвращаем поиск. В этом случае поиск больше целевого значения.
if search == targetValue
    return search
  • Если поиск больше, чем TargetValue, мы установили -1. то есть – 1 = 22.
if search > targetValue
   max = search - 1
  • Еще раз, мы пересматриваем нашу поисковую стоимость, то есть/2.
search = (16+22)/2 = 38/2 = 19
  • Сравните поиск, чтобы еще раз нацелиться на значение, как обычно, если мы нашли наш ответ. Здесь, поиск значения, мы нашли наш ответ! Итак, мы возвращаем поиск.
  • Наконец, если ни одно из вышеперечисленных условий не выполнено, мы установили функцию для возврата -1.

Нам потребовалось 9 шагов, чтобы искать нашу целевую стоимость среди 30 чисел, если мы должны были посчитать линейно, потребуется около 19 шагов, чтобы сделать то же самое, так что теперь вы можете увидеть, насколько эффективен бинарный поиск.

Теперь мы собираемся перевести наш псевдокод в реальный код в JavaScript и Ruby, чтобы мы могли лучше оценить бинарный поиск:

Реализация Ruby

JavaScript

Вывод

Одна очень важная вещь, которую нужно отметить о выполнении бинарного поиска, заключается в том, что вы нарезаете массив пополам каждый раз, когда выполняете поиск. В нашем коде, выше, мы сделали итеративное решение для решения бинарного поиска, вы также можете решить проблему с помощью рекурсии, если хотите. Истинная сила бинарного поиска лежит, когда у вас есть миллионы, вероятно, миллиарды элементов для поиска , это также широко используемый метод для поиска в вычислениях.

Оригинал: “https://dev.to/david405/performing-binary-search-in-javascript-and-ruby-3j58”