В мире компьютерной науки, двоичный поиск алгоритм является основой «Разделить и завоевать» алгоритмическая парадигма. Этот алгоритм является самым простым иллюстрацией того, как работает «разделить и завоевать». Использование этого алгоритма поиска может быть сделано в 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”