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

Объяснил алгоритм бинарного поиска

В мире информатики, алгоритм бинарного поиска является основой «Divide & Conquer … Теги с алгоритмами, учебником, Python, CPP.

В мире компьютерной науки, двоичный поиск алгоритм является основой «Разделить и завоевать» алгоритмическая парадигма. Этот алгоритм является самым простым иллюстрацией того, как работает «разделить и завоевать». Использование этого алгоритма поиска может быть сделано в o (log (n)), где линейный поиск принимает o (n) время в худшем случае. Это экономит время и делает количество сравнений для выполнения меньшего количества.

Давайте рассмотрим сценарий. Предположим, у вас есть книга 1000 страниц, и нам нужно перейти на страницу № 580 и проверять, существует ли страница или нет. Используя алгоритм линейного поиска, вы можете начать искать нужную страницу с самого начала или конца. В обоих способах вы должны искать на большом количестве страниц, чтобы найти страницу № 580, так как мы проверяем каждую страницу на нашем пути. Но мы можем сделать это лучше? Можем ли мы найти нашу желаемую страницу, сделав меньше сравнений? Ответ: Да, мы можем сделать это быстрее. Мы можем сделать улучшение за меньшее время, используя «Двоичный алгоритм поиска» Отказ Во-первых, мы должны иметь в виду, что этот алгоритм может быть правильно применен, если данные отсортированы. В случае номеров страниц книги данные отсортированы. Здесь у нас есть номера страниц от 1 до 1000 в сортировке. Нам нужно найти страницу № 580. Давайте разделим нашу область поиска на две половины. Получите среднюю точку диапазона от 1 до 1000, как это, средний индекс = (окончание индекса + запуск индекса-1)/2. Итак, это идет так, (1000/. Сравнить 500 (средний индекс) с 580 (индекс поиска). 580 больше 500, поэтому он не может присутствовать в диапазоне (1-500). Итак, давайте исключаем его из нашей области поиска. Теперь у нас есть (501-1000) пронумерованные страницы для поиска. Повторите предыдущий процесс и получите среднюю точку диапазона (501 -1000). Это будет 750. Сравните 580 снова с 750. И исправить новую область поиска как (501 -750) и исключить диапазон, в котором номер не может присутствовать. Продолжайте повторять процесс, пока не найдете точное число или не достигнуть ситуации, когда не осталось никаких номеров для поиска. В этом процессе вы можете найти нужный номер в журнале (N) времени И вам нужно выполнить очень меньше числа сравнений, чем линейный поиск, как после каждого сравнения, мы делаем нашу область поиска, исключая область, в которых поиск не нужен. Таким образом, метод очень прост, когда у вас есть сортированный набор данных и должен найти что-то в наборе данных, а не следить за проверкой каждого элемента в данных, установленных один за другим, продолжайте разделить данные, установленные на две половины и сравните значение с среднее значение.

Этот алгоритм часто используется в небольших до больших задачах в информатике. Некоторые другие важные алгоритмы, такие как Сортировка слияния Также используйте концепцию деления и завоевания. Если вы хорошо понимаете этот алгоритм, вы получите основную идею о «Разделить и завоевать» Парадигма, которая, безусловно, поможет вам в изучении более сложных алгоритмов в будущем. Самое важное, что нужно помнить, когда вы собираетесь применить алгоритм двоичного поиска, данные должны быть размещены в сортировке, в противном случае вы не можете применить двоичный поиск. Если вы собираетесь начать конкурентное программирование, должны знать алгоритм двоичного поиска, поскольку вы найдете проблемы, необходимые для решения непосредственно с использованием двоичного алгоритма поиска или используя концепцию алгоритма двоичного поиска.

Я прилагал здесь мой код внедрении алгоритма двоичного поиска в языке программирования Python & C ++ ⭐.

✴️ Реализация кода в Python

def main():
    given_array = [1, 2, 3, 5, 8, 9, 11]
    find = 8  # Number to search.
    number_found = False  # Determines if the number is found or not.
    start_index = 0
    end_index = len(given_array) - 1
    while end_index > start_index:
        mid_index = (end_index + start_index - 1) // 2
        if given_array[mid_index] == find:
            number_found = True
            break
        elif given_array[mid_index] > find:
            end_index = mid_index - 1

        else:
            start_index = mid_index + 1

    if number_found:
        print("The Desired Element Is Present!")
    else:
        print("The Desired Element Is Not Present")

if __name__ == "__main__":
    main()

✴️ Реализация кода в C ++

#include
#include

using namespace std;

int main()
{
    int arr[7]= {1, 4, 6, 8, 9, 10, 12}; // given array.
    int y = 9; // Element to search is stored in variable y.
    int l = 0;  // l = Lower Index
    int h = 7; // h = Higher Index
    int m; // m = Middle Index

    // Start of the loop to perform "Binary Search Algorithm".
    while(l <= h) // The loop will run until there is one element left in array.
    {
        m = (l + h)/2; // Find the mid to divide the array into two almost equal parts.

        if(y == arr[m]) // If the element is in the mid, we found it!
        {
            break;  // Break the loop.
        }

        if(y < arr[m]) // If search element is lesser than element at the mid, cut the higher part of the array.
        {
            h = m - 1;
        }
        else          // Else cut the lower part of the array.
        {
            l = m + 1;
        }
    }
    if(l > h)
    {
        printf( "%d not found\n", y);
    }
    else
    {
        printf( "%d found!", y);
    }
}

Заключение

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

💡 И подписаться на наш YouTube TechLolenersinc и телеграмма t.me/TechLearners Будет удивительным.

🌟 Спасибо за чтение. Держите кодировку, продолжайте обмен! 🌟

📌 представлен в Twitter

Оригинал: “https://dev.to/techlearners/binary-search-algorithm-explained-2nn5”