[{"data":1,"prerenderedAt":2110},["ShallowReactive",2],{"navigation":3,"\u002Fblog\u002Fpython\u002Fst24":386,"\u002Fblog\u002Fpython\u002Fst24-surround":2105},[4],{"title":5,"path":6,"stem":7,"children":8,"page":114},"Blog","\u002Fblog","blog",[9,115,184,329],{"title":10,"path":11,"stem":12,"children":13,"page":114},"Ege","\u002Fblog\u002Fege","blog\u002Fege",[14,18,22,26,30,34,38,42,46,50,54,58,62,66,70,74,78,82,86,90,94,98,102,106,110],{"title":15,"path":16,"stem":17},"ЕГЭ Задание 1","\u002Fblog\u002Fege\u002Ftask1","blog\u002Fege\u002Ftask1",{"title":19,"path":20,"stem":21},"ЕГЭ Задание 10","\u002Fblog\u002Fege\u002Ftask10","blog\u002Fege\u002Ftask10",{"title":23,"path":24,"stem":25},"ЕГЭ Задание 11","\u002Fblog\u002Fege\u002Ftask11","blog\u002Fege\u002Ftask11",{"title":27,"path":28,"stem":29},"ЕГЭ Задание 12","\u002Fblog\u002Fege\u002Ftask12","blog\u002Fege\u002Ftask12",{"title":31,"path":32,"stem":33},"ЕГЭ Задание 13","\u002Fblog\u002Fege\u002Ftask13","blog\u002Fege\u002Ftask13",{"title":35,"path":36,"stem":37},"ЕГЭ Задание 14","\u002Fblog\u002Fege\u002Ftask14","blog\u002Fege\u002Ftask14",{"title":39,"path":40,"stem":41},"ЕГЭ Задание 15","\u002Fblog\u002Fege\u002Ftask15","blog\u002Fege\u002Ftask15",{"title":43,"path":44,"stem":45},"ЕГЭ Задание 16","\u002Fblog\u002Fege\u002Ftask16","blog\u002Fege\u002Ftask16",{"title":47,"path":48,"stem":49},"ЕГЭ Задание 17","\u002Fblog\u002Fege\u002Ftask17","blog\u002Fege\u002Ftask17",{"title":51,"path":52,"stem":53},"ЕГЭ Задание 18","\u002Fblog\u002Fege\u002Ftask18","blog\u002Fege\u002Ftask18",{"title":55,"path":56,"stem":57},"ЕГЭ Задание 19, 20, 21","\u002Fblog\u002Fege\u002Ftask19_20_21","blog\u002Fege\u002Ftask19_20_21",{"title":59,"path":60,"stem":61},"ЕГЭ Задание 2","\u002Fblog\u002Fege\u002Ftask2","blog\u002Fege\u002Ftask2",{"title":63,"path":64,"stem":65},"ЕГЭ Задание 22","\u002Fblog\u002Fege\u002Ftask22","blog\u002Fege\u002Ftask22",{"title":67,"path":68,"stem":69},"ЕГЭ Задание 23","\u002Fblog\u002Fege\u002Ftask23","blog\u002Fege\u002Ftask23",{"title":71,"path":72,"stem":73},"ЕГЭ Задание 24","\u002Fblog\u002Fege\u002Ftask24","blog\u002Fege\u002Ftask24",{"title":75,"path":76,"stem":77},"ЕГЭ Задание 25","\u002Fblog\u002Fege\u002Ftask25","blog\u002Fege\u002Ftask25",{"title":79,"path":80,"stem":81},"ЕГЭ Задание 26","\u002Fblog\u002Fege\u002Ftask26","blog\u002Fege\u002Ftask26",{"title":83,"path":84,"stem":85},"ЕГЭ Задание 27","\u002Fblog\u002Fege\u002Ftask27","blog\u002Fege\u002Ftask27",{"title":87,"path":88,"stem":89},"ЕГЭ Задание 3","\u002Fblog\u002Fege\u002Ftask3","blog\u002Fege\u002Ftask3",{"title":91,"path":92,"stem":93},"ЕГЭ Задание 4","\u002Fblog\u002Fege\u002Ftask4","blog\u002Fege\u002Ftask4",{"title":95,"path":96,"stem":97},"ЕГЭ Задание 5","\u002Fblog\u002Fege\u002Ftask5","blog\u002Fege\u002Ftask5",{"title":99,"path":100,"stem":101},"ЕГЭ Задание 6","\u002Fblog\u002Fege\u002Ftask6","blog\u002Fege\u002Ftask6",{"title":103,"path":104,"stem":105},"ЕГЭ Задание 7","\u002Fblog\u002Fege\u002Ftask7","blog\u002Fege\u002Ftask7",{"title":107,"path":108,"stem":109},"ЕГЭ Задание 8","\u002Fblog\u002Fege\u002Ftask8","blog\u002Fege\u002Ftask8",{"title":111,"path":112,"stem":113},"ЕГЭ Задание 9","\u002Fblog\u002Fege\u002Ftask9","blog\u002Fege\u002Ftask9",false,{"title":116,"path":117,"stem":118,"children":119,"page":114},"Oge","\u002Fblog\u002Foge","blog\u002Foge",[120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180],{"title":121,"path":122,"stem":123},"ОГЭ Задание 1","\u002Fblog\u002Foge\u002Ftask1","blog\u002Foge\u002Ftask1",{"title":125,"path":126,"stem":127},"ОГЭ Задание 10","\u002Fblog\u002Foge\u002Ftask10","blog\u002Foge\u002Ftask10",{"title":129,"path":130,"stem":131},"ОГЭ Задание 11","\u002Fblog\u002Foge\u002Ftask11","blog\u002Foge\u002Ftask11",{"title":133,"path":134,"stem":135},"ОГЭ Задание 12","\u002Fblog\u002Foge\u002Ftask12","blog\u002Foge\u002Ftask12",{"title":137,"path":138,"stem":139},"ОГЭ Задание 13","\u002Fblog\u002Foge\u002Ftask13","blog\u002Foge\u002Ftask13",{"title":141,"path":142,"stem":143},"ОГЭ Задание 14","\u002Fblog\u002Foge\u002Ftask14","blog\u002Foge\u002Ftask14",{"title":145,"path":146,"stem":147},"ОГЭ Задание 15","\u002Fblog\u002Foge\u002Ftask15","blog\u002Foge\u002Ftask15",{"title":149,"path":150,"stem":151},"ОГЭ Задание 16","\u002Fblog\u002Foge\u002Ftask16","blog\u002Foge\u002Ftask16",{"title":153,"path":154,"stem":155},"ОГЭ Задание 2","\u002Fblog\u002Foge\u002Ftask2","blog\u002Foge\u002Ftask2",{"title":157,"path":158,"stem":159},"ОГЭ Задание 3","\u002Fblog\u002Foge\u002Ftask3","blog\u002Foge\u002Ftask3",{"title":161,"path":162,"stem":163},"ОГЭ Задание 4","\u002Fblog\u002Foge\u002Ftask4","blog\u002Foge\u002Ftask4",{"title":165,"path":166,"stem":167},"ОГЭ Задание 5","\u002Fblog\u002Foge\u002Ftask5","blog\u002Foge\u002Ftask5",{"title":169,"path":170,"stem":171},"ОГЭ Задание 6","\u002Fblog\u002Foge\u002Ftask6","blog\u002Foge\u002Ftask6",{"title":173,"path":174,"stem":175},"ОГЭ Задание 7","\u002Fblog\u002Foge\u002Ftask7","blog\u002Foge\u002Ftask7",{"title":177,"path":178,"stem":179},"ОГЭ Задание 8","\u002Fblog\u002Foge\u002Ftask8","blog\u002Foge\u002Ftask8",{"title":181,"path":182,"stem":183},"ОГЭ Задание 9","\u002Fblog\u002Foge\u002Ftask9","blog\u002Foge\u002Ftask9",{"title":185,"path":186,"stem":187,"children":188,"page":114},"Python","\u002Fblog\u002Fpython","blog\u002Fpython",[189,193,197,201,205,209,213,217,221,225,229,233,237,241,245,249,253,257,261,265,269,273,277,281,285,289,293,297,301,305,309,313,317,321,325],{"title":190,"path":191,"stem":192},"Знакомство с синтаксисом","\u002Fblog\u002Fpython\u002Fst1","blog\u002Fpython\u002Fst1",{"title":194,"path":195,"stem":196},"Отладка","\u002Fblog\u002Fpython\u002Fst10","blog\u002Fpython\u002Fst10",{"title":198,"path":199,"stem":200},"Модули и пакеты","\u002Fblog\u002Fpython\u002Fst11","blog\u002Fpython\u002Fst11",{"title":202,"path":203,"stem":204},"Кортежи","\u002Fblog\u002Fpython\u002Fst12","blog\u002Fpython\u002Fst12",{"title":206,"path":207,"stem":208},"Знакомство со списками","\u002Fblog\u002Fpython\u002Fst13","blog\u002Fpython\u002Fst13",{"title":210,"path":211,"stem":212},"Списки и циклы","\u002Fblog\u002Fpython\u002Fst14","blog\u002Fpython\u002Fst14",{"title":214,"path":215,"stem":216},"Использование списков ч.1","\u002Fblog\u002Fpython\u002Fst15","blog\u002Fpython\u002Fst15",{"title":218,"path":219,"stem":220},"Использование списков ч.2","\u002Fblog\u002Fpython\u002Fst16","blog\u002Fpython\u002Fst16",{"title":222,"path":223,"stem":224},"Использование списков ч.3","\u002Fblog\u002Fpython\u002Fst17","blog\u002Fpython\u002Fst17",{"title":226,"path":227,"stem":228},"Словари","\u002Fblog\u002Fpython\u002Fst18","blog\u002Fpython\u002Fst18",{"title":230,"path":231,"stem":232},"Множества","\u002Fblog\u002Fpython\u002Fst19","blog\u002Fpython\u002Fst19",{"title":234,"path":235,"stem":236},"Переменные","\u002Fblog\u002Fpython\u002Fst2","blog\u002Fpython\u002Fst2",{"title":238,"path":239,"stem":240},"Хеш-таблицы","\u002Fblog\u002Fpython\u002Fst20","blog\u002Fpython\u002Fst20",{"title":242,"path":243,"stem":244},"Решето Эратосфена","\u002Fblog\u002Fpython\u002Fst21","blog\u002Fpython\u002Fst21",{"title":246,"path":247,"stem":248},"Длинная арифметика","\u002Fblog\u002Fpython\u002Fst22","blog\u002Fpython\u002Fst22",{"title":250,"path":251,"stem":252},"Декораторы функций","\u002Fblog\u002Fpython\u002Fst23","blog\u002Fpython\u002Fst23",{"title":254,"path":255,"stem":256},"Знакомство с алгоритмами","\u002Fblog\u002Fpython\u002Fst24","blog\u002Fpython\u002Fst24",{"title":258,"path":259,"stem":260},"Бинарный поиск – примеры задач","\u002Fblog\u002Fpython\u002Fst25","blog\u002Fpython\u002Fst25",{"title":262,"path":263,"stem":264},"Сортировка выбором","\u002Fblog\u002Fpython\u002Fst26","blog\u002Fpython\u002Fst26",{"title":266,"path":267,"stem":268},"Рекурсия и стек","\u002Fblog\u002Fpython\u002Fst27","blog\u002Fpython\u002Fst27",{"title":270,"path":271,"stem":272},"Быстрая сортировка","\u002Fblog\u002Fpython\u002Fst28","blog\u002Fpython\u002Fst28",{"title":274,"path":275,"stem":276},"Поиск в ширину","\u002Fblog\u002Fpython\u002Fst29","blog\u002Fpython\u002Fst29",{"title":278,"path":279,"stem":280},"Работа со строками","\u002Fblog\u002Fpython\u002Fst3","blog\u002Fpython\u002Fst3",{"title":282,"path":283,"stem":284},"Поиск в глубину","\u002Fblog\u002Fpython\u002Fst30","blog\u002Fpython\u002Fst30",{"title":286,"path":287,"stem":288},"Сбалансированные деревья","\u002Fblog\u002Fpython\u002Fst31","blog\u002Fpython\u002Fst31",{"title":290,"path":291,"stem":292},"Алгоритм Дейкстры","\u002Fblog\u002Fpython\u002Fst32","blog\u002Fpython\u002Fst32",{"title":294,"path":295,"stem":296},"Жадные алгоритмы","\u002Fblog\u002Fpython\u002Fst33","blog\u002Fpython\u002Fst33",{"title":298,"path":299,"stem":300},"Динамическое программирование","\u002Fblog\u002Fpython\u002Fst34","blog\u002Fpython\u002Fst34",{"title":302,"path":303,"stem":304},"Алгоритм k ближайших соседей","\u002Fblog\u002Fpython\u002Fst35","blog\u002Fpython\u002Fst35",{"title":306,"path":307,"stem":308},"Типы данных","\u002Fblog\u002Fpython\u002Fst4","blog\u002Fpython\u002Fst4",{"title":310,"path":311,"stem":312},"О функциях","\u002Fblog\u002Fpython\u002Fst5","blog\u002Fpython\u002Fst5",{"title":314,"path":315,"stem":316},"Свойства и методы","\u002Fblog\u002Fpython\u002Fst6","blog\u002Fpython\u002Fst6",{"title":318,"path":319,"stem":320},"Определение функций","\u002Fblog\u002Fpython\u002Fst7","blog\u002Fpython\u002Fst7",{"title":322,"path":323,"stem":324},"Логика","\u002Fblog\u002Fpython\u002Fst8","blog\u002Fpython\u002Fst8",{"title":326,"path":327,"stem":328},"Циклы","\u002Fblog\u002Fpython\u002Fst9","blog\u002Fpython\u002Fst9",{"title":330,"path":331,"stem":332,"children":333,"page":114},"Toi","\u002Fblog\u002Ftoi","blog\u002Ftoi",[334,338,342,346,350,354,358,362,366,370,374,378,382],{"title":335,"path":336,"stem":337},"Информация и информационные процессы","\u002Fblog\u002Ftoi\u002Fst1","blog\u002Ftoi\u002Fst1",{"title":339,"path":340,"stem":341},"Электронные таблицы","\u002Fblog\u002Ftoi\u002Fst10","blog\u002Ftoi\u002Fst10",{"title":343,"path":344,"stem":345},"Система, её свойства и компоненты. Моделирование","\u002Fblog\u002Ftoi\u002Fst11","blog\u002Ftoi\u002Fst11",{"title":347,"path":348,"stem":349},"Представление информации в компьютере","\u002Fblog\u002Ftoi\u002Fst12","blog\u002Ftoi\u002Fst12",{"title":351,"path":352,"stem":353},"Средства информационно-коммуникационных технологий. Файловая система","\u002Fblog\u002Ftoi\u002Fst13","blog\u002Ftoi\u002Fst13",{"title":355,"path":356,"stem":357},"Комбинаторика","\u002Fblog\u002Ftoi\u002Fst2","blog\u002Ftoi\u002Fst2",{"title":359,"path":360,"stem":361},"Адресация в интернете","\u002Fblog\u002Ftoi\u002Fst3","blog\u002Ftoi\u002Fst3",{"title":363,"path":364,"stem":365},"Измерение количества информации","\u002Fblog\u002Ftoi\u002Fst4","blog\u002Ftoi\u002Fst4",{"title":367,"path":368,"stem":369},"Системы счисления","\u002Fblog\u002Ftoi\u002Fst5","blog\u002Ftoi\u002Fst5",{"title":371,"path":372,"stem":373},"Диаграммы Эйлера — Венна","\u002Fblog\u002Ftoi\u002Fst6","blog\u002Ftoi\u002Fst6",{"title":375,"path":376,"stem":377},"Условие Фано","\u002Fblog\u002Ftoi\u002Fst7","blog\u002Ftoi\u002Fst7",{"title":379,"path":380,"stem":381},"Теория графов","\u002Fblog\u002Ftoi\u002Fst8","blog\u002Ftoi\u002Fst8",{"title":383,"path":384,"stem":385},"Алгебра логики","\u002Fblog\u002Ftoi\u002Fst9","blog\u002Ftoi\u002Fst9",{"id":387,"title":254,"author":388,"body":393,"date":2095,"description":2096,"extension":2097,"image":2098,"meta":2099,"minRead":2100,"navigation":2101,"num":2102,"path":255,"seo":2103,"stem":256,"__hash__":2104},"python\u002Fblog\u002Fpython\u002Fst24.md",{"name":389,"avatar":390},"Штана Альберт Игоревич",{"src":391,"alt":392},"me.jpg","@ashtana",{"type":394,"value":395,"toc":2077},"minimark",[396,400,405,410,427,430,433,446,449,452,456,465,472,481,488,491,494,500,503,603,844,1143,1148,1151,1156,1164,1210,1216,1219,1256,1259,1292,1295,1298,1505,1508,1589,1600,1603,1606,1611,1616,1621,1627,1631,1634,1656,1661,1664,1669,1672,1675,1678,1681,1736,1739,1742,1748,1751,1754,1758,1761,1767,1770,1775,1778,1781,1785,1788,1916,1920,1923,1932,1937,1941,1944,1961,1964,1967,1970,1975,1978,1992,1997,2001,2004,2007,2052,2061,2066,2070,2074],[397,398,254],"h2",{"id":399},"знакомство-с-алгоритмами",[401,402],"card-collapsible",{":isList":403,"title":404},"[\"Вы познакомитесь с первым алгоритмом поиска(бинарный поиск).\",\"Вы узнаете, как описывается время выполнения алгоритма концепцией \\\"О-большое\\\".\"]","Из этой статьи вы узнаете",[406,407,409],"h3",{"id":408},"введение","Введение",[411,412,413,420,421,426],"p",{},[414,415,416],"strong",{},[417,418,419],"em",{},"Алгоритмом"," называется набор инструкций для выполнения некоторой задачи.\nВ принципе любой работающий фрагмент программного кода можно назвать алгоритмом. В данной статье рассмотрим алгоритм двоичного или ",[414,422,423],{},[417,424,425],{},"бинарного поиска",".\nДанный алгоритм например позволяет сократить количество необходимых операций поиска с 1 миллиарда до 30!\nВот ещё некоторые примеры применения алгоритмов.\nУстройства GPS используют алгоритмы из теории графов. При помощи методов динамического программирования можно создать алгоритм для игры в шашки.",[411,428,429],{},"Чтобы понять эффективность тех или иных алгоритмов – нужно научится сравнивать их сильные и слабые стороны.\nНапример, из каких соображений выбирать между быстрой сортировкой и сортировкой слиянием?\nЧто использовать — словарь или список?\nДаже выбор другой структуры, а иногда и другого языка программирования может оказать сильное влияние на конечный результат решения задачи.",[411,431,432],{},"Зачем изучать алгоритмы? Чтобы освоить эффективные методы решения задач, которые вам сейчас, возможно, неизвестны.\nЗная методы применения алгоритмов и сами алгоритмы вы сможете например:",[434,435,436,440,443],"ul",{},[437,438,439],"li",{},"Создавая видеоигры написать систему на базе искусственного интеллекта, моделирующую действия пользователя с применением алгоритмов из теории графов;",[437,441,442],{},"Создавать рекомендательные системы по алгоритму k ближайших соседей;",[437,444,445],{},"Некоторые задачи не решить за разумное время! Зная алгоритмы NP-полноты, вы сможете идентифицировать такие задачи и построить решения для получения приближенного ответа.",[411,447,448],{},"Если сказать шире, то к концу изучения наиболее часто применяемых алгоритмов вы сможете воспользоваться знаниями, чтобы изучать более специализированные алгоритмы из области искусственного интеллекта, баз данных и т.п.",[411,450,451],{},"Чтобы было проще понимать тему алгоритмов необходимо знать базовую алгебру, а также вам необходимо владеть уверенно хотя бы одним языком программирования.\nЕсли такие знания у вас есть, то можно приступать!",[406,453,455],{"id":454},"бинарный-поиск","Бинарный поиск",[411,457,458,459,464],{},"Допустим, вы ищите фамилию человека в телефонном справочнике(книге).\nОна начинается на букву \"М\" и можно конечно начать искать с самого начала и идти по каждой странице, пока не доберётесь до буквы \"М\".\nНо для ускорения поиска лучше раскрыть справочник на середине(буква \"М\" как раз должна находится где-то ближе к середине книги).\nТеперь допустим что вы вводите свои данные на каком нибудь сайте(в ВК например).\nПри этом сайту необходимо будет проверить, есть ли у вас учётная запись. Например, вы выбрали себе ник(имя пользователя) \"karlmarks\".\nСайт может начать с буквы \"a\" и проверять все логины подряд, но разумнее будет опять же начать с середины.\nПеред нами задача поиска. И во всех этих случаях можно применить один алгоритм: ",[414,460,461],{},[417,462,463],{},"бинарный(двоичный) поиск",".",[411,466,467,471],{},[417,468,469],{},[414,470,455],{}," — это алгоритм: на входе которого должен быть отсортированный список всех элементов поиска, а на выходе мы должны получить номер(индекс) искомого элемента из этого же списка(или же ничего если элемент не будет найден).",[411,473,474,475,480],{},"Рассмотрим пример. Вы должны отгадать моё число от 1 до 100. При каждой попытке я буду давать один из трёх ответов: \"много\", \"мало\" или \"угадано\".\nДопустим, вы начинаете перебирать все варианты подряд: 1,2,3,4,5,... Это пример простого поиска(или даже \"тупого\").\nПри каждой догадке исключается только одно число. Если я загадал число 48, то, чтобы добраться до него, потребуется 48 попыток(или 52 если идти с конца 100, 99, 98, ...)!\nТут то и может прийти на помощь бинарный поиск. Сразу начнём с середины — с 50. - \"Много\". Но вы исключили сразу половину чисел. Теперь вы знаете что числа больше 50(50-100) будут больше загаданного.\nСледующая попытка алгоритма: 25. - \"Мало\". На этот раз \"недолёт\". Но вы снова исключили половину оставшихся чисел! Получается что, ",[414,476,477],{},[417,478,479],{},"с бинарным поиском каждый отбрасывается половина диапазона!","\nСледующим будет число: 38(посередине между 25 и 50) и т.д. Пока не будет найдено загаданное число.\nПопробуем определить точнее, сколько чисел будет исключаться каждый раз?",[411,482,483],{},[484,485],"img",{"alt":486,"src":487},"Пример использования бинарного поиска","\u002Fimages\u002Fblog\u002Fpython\u002Fst24\u002Fimg1.png",[411,489,490],{},"И так получается что, какое бы число я не загадал от 1 до 100, с помощью алгоритма бинарного поиска, вы отгадаете его точно за 7 попыток.",[411,492,493],{},"Выполните простое упражнение: вы ищите слово в словаре с 200000 словами. Как вы думаете, сколько попыток вам понадобится в худшем случае?\nПри простом поиске может потребоваться до 200000 попыток, если вы начала сначала, а искомое слово находится на самом последнем месте.\nНо если вы использовали бинарный поиск, то количество слов сокращается вдвое, пока не останется только одно искомое слово.",[411,495,496],{},[484,497],{"alt":498,"src":499},"Пример 2 использования бинарного поиска","\u002Fimages\u002Fblog\u002Fpython\u002Fst24\u002Fimg2.png",[411,501,502],{},"Итак, бинарный поиск отнимет всего 18 шагов!",[411,504,505,506,509,510,599,600,602],{},"В общем случае для списка из ",[417,507,508],{},"n"," элементов бинарный поиск выполняется за ",[511,512,516],"mjx-container",{"className":513,"jax":515},[514],"MathJax","SVG",[517,518,526,550],"svg",{"style":519,"xmlns":520,"width":521,"height":522,"role":484,"focusable":523,"viewBox":524,"xmlnsXLink":525},"vertical-align: -0.464ex;","http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg","5.196ex","2.034ex","false","0 -694 2296.6 899","http:\u002F\u002Fwww.w3.org\u002F1999\u002Fxlink",[527,528,529,534,538,542,546],"defs",{},[530,531],"path",{"id":532,"d":533},"MJX-1-TEX-I-1D459","M117 59Q117 26 142 26Q179 26 205 131Q211 151 215 152Q217 153 225 153H229Q238 153 241 153T246 151T248 144Q247 138 245 128T234 90T214 43T183 6T137 -11Q101 -11 70 11T38 85Q38 97 39 102L104 360Q167 615 167 623Q167 626 166 628T162 632T157 634T149 635T141 636T132 637T122 637Q112 637 109 637T101 638T95 641T94 647Q94 649 96 661Q101 680 107 682T179 688Q194 689 213 690T243 693T254 694Q266 694 266 686Q266 675 193 386T118 83Q118 81 118 75T117 65V59Z",[530,535],{"id":536,"d":537},"MJX-1-TEX-I-1D45C","M201 -11Q126 -11 80 38T34 156Q34 221 64 279T146 380Q222 441 301 441Q333 441 341 440Q354 437 367 433T402 417T438 387T464 338T476 268Q476 161 390 75T201 -11ZM121 120Q121 70 147 48T206 26Q250 26 289 58T351 142Q360 163 374 216T388 308Q388 352 370 375Q346 405 306 405Q243 405 195 347Q158 303 140 230T121 120Z",[530,539],{"id":540,"d":541},"MJX-1-TEX-I-1D454","M311 43Q296 30 267 15T206 0Q143 0 105 45T66 160Q66 265 143 353T314 442Q361 442 401 394L404 398Q406 401 409 404T418 412T431 419T447 422Q461 422 470 413T480 394Q480 379 423 152T363 -80Q345 -134 286 -169T151 -205Q10 -205 10 -137Q10 -111 28 -91T74 -71Q89 -71 102 -80T116 -111Q116 -121 114 -130T107 -144T99 -154T92 -162L90 -164H91Q101 -167 151 -167Q189 -167 211 -155Q234 -144 254 -122T282 -75Q288 -56 298 -13Q311 35 311 43ZM384 328L380 339Q377 350 375 354T369 368T359 382T346 393T328 402T306 405Q262 405 221 352Q191 313 171 233T151 117Q151 38 213 38Q269 38 323 108L331 118L384 328Z",[530,543],{"id":544,"d":545},"MJX-1-TEX-N-32","M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z",[530,547],{"id":548,"d":549},"MJX-1-TEX-I-1D45B","M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z",[551,552,556],"g",{"stroke":553,"fill":553,"stroke-width":554,"transform":555},"currentColor","0","scale(1,-1)",[551,557,559,567,574,592],{"dataMmlNode":558},"math",[551,560,562],{"dataMmlNode":561},"mi",[563,564],"use",{"dataC":565,"xLinkHref":566},"1D459","#MJX-1-TEX-I-1D459",[551,568,570],{"dataMmlNode":561,"transform":569},"translate(298,0)",[563,571],{"dataC":572,"xLinkHref":573},"1D45C","#MJX-1-TEX-I-1D45C",[551,575,578,584],{"dataMmlNode":576,"transform":577},"msub","translate(783,0)",[551,579,580],{"dataMmlNode":561},[563,581],{"dataC":582,"xLinkHref":583},"1D454","#MJX-1-TEX-I-1D454",[551,585,588],{"dataMmlNode":586,"transform":587},"mn","translate(510,-150) scale(0.707)",[563,589],{"dataC":590,"xLinkHref":591},"32","#MJX-1-TEX-N-32",[551,593,595],{"dataMmlNode":561,"transform":594},"translate(1696.6,0)",[563,596],{"dataC":597,"xLinkHref":598},"1D45B","#MJX-1-TEX-I-1D45B"," шагов, тогда как простой поиск будет выполнен за ",[417,601,508],{}," шагов.",[604,605,606],"blockquote",{},[411,607,608,609,722,723,726,727,777,778,843],{},"Логарифм — обратная операция возведению в степень. ",[511,610,612],{"className":611,"jax":515},[514],[517,613,617,636],{"style":519,"xmlns":520,"width":614,"height":615,"role":484,"focusable":523,"viewBox":616,"xmlnsXLink":525},"17.251ex","2.161ex","0 -750 7625.1 955",[527,618,619,622,625,628,632],{},[530,620],{"id":621,"d":533},"MJX-2-TEX-I-1D459",[530,623],{"id":624,"d":537},"MJX-2-TEX-I-1D45C",[530,626],{"id":627,"d":541},"MJX-2-TEX-I-1D454",[530,629],{"id":630,"d":631},"MJX-2-TEX-N-31","M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z",[530,633],{"id":634,"d":635},"MJX-2-TEX-N-30","M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z",[551,637,638],{"stroke":553,"fill":553,"stroke-width":554,"transform":555},[551,639,640,645,650,672,682,692,698,703,708,713],{"dataMmlNode":558},[551,641,642],{"dataMmlNode":561},[563,643],{"dataC":565,"xLinkHref":644},"#MJX-2-TEX-I-1D459",[551,646,647],{"dataMmlNode":561,"transform":569},[563,648],{"dataC":572,"xLinkHref":649},"#MJX-2-TEX-I-1D45C",[551,651,652,657],{"dataMmlNode":576,"transform":577},[551,653,654],{"dataMmlNode":561},[563,655],{"dataC":582,"xLinkHref":656},"#MJX-2-TEX-I-1D454",[551,658,661],{"dataMmlNode":659,"transform":587,"dataMjxTexclass":660},"TeXAtom","ORD",[551,662,663,667],{"dataMmlNode":586},[563,664],{"dataC":665,"xLinkHref":666},"31","#MJX-2-TEX-N-31",[563,668],{"dataC":669,"xLinkHref":670,"transform":671},"30","#MJX-2-TEX-N-30","translate(500,0)",[551,673,675,677,679],{"dataMmlNode":586,"transform":674},"translate(2050.1,0)",[563,676],{"dataC":665,"xLinkHref":666},[563,678],{"dataC":669,"xLinkHref":670,"transform":671},[563,680],{"dataC":669,"xLinkHref":670,"transform":681},"translate(1000,0)",[551,683,685],{"dataMmlNode":561,"transform":684},"translate(3550.1,0)",[686,687,691],"text",{"dataVariant":688,"transform":555,"font-size":689,"font-family":690,"font-style":688},"italic","884px","serif","и",[551,693,695],{"dataMmlNode":561,"transform":694},"translate(4150.1,0)",[686,696,697],{"dataVariant":688,"transform":555,"font-size":689,"font-family":690,"font-style":688},"л",[551,699,701],{"dataMmlNode":561,"transform":700},"translate(4750.1,0)",[686,702,691],{"dataVariant":688,"transform":555,"font-size":689,"font-family":690,"font-style":688},[551,704,706],{"dataMmlNode":561,"transform":705},"translate(5350.1,0)",[563,707],{"dataC":565,"xLinkHref":644},[551,709,711],{"dataMmlNode":561,"transform":710},"translate(5648.1,0)",[563,712],{"dataC":582,"xLinkHref":656},[551,714,716,718,720],{"dataMmlNode":586,"transform":715},"translate(6125.1,0)",[563,717],{"dataC":665,"xLinkHref":666},[563,719],{"dataC":669,"xLinkHref":670,"transform":671},[563,721],{"dataC":669,"xLinkHref":670,"transform":681}," это означает, сколько раз нужно перемножить число 10, чтобы получить число 100. ",[724,725],"br",{},"\nКогда я буду писать ",[511,728,730],{"className":729,"jax":515},[514],[517,731,736,751],{"style":732,"xmlns":520,"width":733,"height":734,"role":484,"focusable":523,"viewBox":735,"xmlnsXLink":525},"vertical-align: -0.05ex;","5.038ex","1.62ex","0 -694 2227 716",[527,737,738,741,745,748],{},[530,739],{"id":740,"d":533},"MJX-3-TEX-I-1D459",[530,742],{"id":743,"d":744},"MJX-3-TEX-I-1D44F","M73 647Q73 657 77 670T89 683Q90 683 161 688T234 694Q246 694 246 685T212 542Q204 508 195 472T180 418L176 399Q176 396 182 402Q231 442 283 442Q345 442 383 396T422 280Q422 169 343 79T173 -11Q123 -11 82 27T40 150V159Q40 180 48 217T97 414Q147 611 147 623T109 637Q104 637 101 637H96Q86 637 83 637T76 640T73 647ZM336 325V331Q336 405 275 405Q258 405 240 397T207 376T181 352T163 330L157 322L136 236Q114 150 114 114Q114 66 138 42Q154 26 178 26Q211 26 245 58Q270 81 285 114T318 219Q336 291 336 325Z",[530,746],{"id":747,"d":631},"MJX-3-TEX-N-31",[530,749],{"id":750,"d":635},"MJX-3-TEX-N-30",[551,752,753],{"stroke":553,"fill":553,"stroke-width":554,"transform":555},[551,754,755,760,766],{"dataMmlNode":558},[551,756,757],{"dataMmlNode":561},[563,758],{"dataC":565,"xLinkHref":759},"#MJX-3-TEX-I-1D459",[551,761,762],{"dataMmlNode":561,"transform":569},[563,763],{"dataC":764,"xLinkHref":765},"1D44F","#MJX-3-TEX-I-1D44F",[551,767,769,772,775],{"dataMmlNode":586,"transform":768},"translate(727,0)",[563,770],{"dataC":665,"xLinkHref":771},"#MJX-3-TEX-N-31",[563,773],{"dataC":669,"xLinkHref":774,"transform":671},"#MJX-3-TEX-N-30",[563,776],{"dataC":669,"xLinkHref":774,"transform":681}," я буду иметь в виду ",[511,779,781],{"className":780,"jax":515},[514],[517,782,785,805],{"style":519,"xmlns":520,"width":783,"height":522,"role":484,"focusable":523,"viewBox":784,"xmlnsXLink":525},"7.232ex","0 -694 3196.6 899",[527,786,787,790,793,796,799,802],{},[530,788],{"id":789,"d":533},"MJX-4-TEX-I-1D459",[530,791],{"id":792,"d":537},"MJX-4-TEX-I-1D45C",[530,794],{"id":795,"d":541},"MJX-4-TEX-I-1D454",[530,797],{"id":798,"d":545},"MJX-4-TEX-N-32",[530,800],{"id":801,"d":631},"MJX-4-TEX-N-31",[530,803],{"id":804,"d":635},"MJX-4-TEX-N-30",[551,806,807],{"stroke":553,"fill":553,"stroke-width":554,"transform":555},[551,808,809,814,819,833],{"dataMmlNode":558},[551,810,811],{"dataMmlNode":561},[563,812],{"dataC":565,"xLinkHref":813},"#MJX-4-TEX-I-1D459",[551,815,816],{"dataMmlNode":561,"transform":569},[563,817],{"dataC":572,"xLinkHref":818},"#MJX-4-TEX-I-1D45C",[551,820,821,826],{"dataMmlNode":576,"transform":577},[551,822,823],{"dataMmlNode":561},[563,824],{"dataC":582,"xLinkHref":825},"#MJX-4-TEX-I-1D454",[551,827,828],{"dataMmlNode":659,"transform":587,"dataMjxTexclass":660},[551,829,830],{"dataMmlNode":586},[563,831],{"dataC":590,"xLinkHref":832},"#MJX-4-TEX-N-32",[551,834,835,838,841],{"dataMmlNode":586,"transform":594},[563,836],{"dataC":665,"xLinkHref":837},"#MJX-4-TEX-N-31",[563,839],{"dataC":669,"xLinkHref":840,"transform":671},"#MJX-4-TEX-N-30",[563,842],{"dataC":669,"xLinkHref":840,"transform":681}," это означает, сколько раз нужно перемножить число 2, чтобы получить 100.",[411,845,846,847,929,930,991,992,929,1079,1142],{},"Итак, мы получили закономерность. Для списка из 8 чисел максимально может потребоваться 8 проверок.\nДля того же списка с применением алгоритма бинарного поиска потребуется: ",[511,848,850],{"className":849,"jax":515},[514],[517,851,854,880],{"style":519,"xmlns":520,"width":852,"height":522,"role":484,"focusable":523,"viewBox":853,"xmlnsXLink":525},"9.118ex","0 -694 4030.1 899",[527,855,856,859,862,865,868,872,876],{},[530,857],{"id":858,"d":533},"MJX-5-TEX-I-1D459",[530,860],{"id":861,"d":537},"MJX-5-TEX-I-1D45C",[530,863],{"id":864,"d":541},"MJX-5-TEX-I-1D454",[530,866],{"id":867,"d":545},"MJX-5-TEX-N-32",[530,869],{"id":870,"d":871},"MJX-5-TEX-N-38","M70 417T70 494T124 618T248 666Q319 666 374 624T429 515Q429 485 418 459T392 417T361 389T335 371T324 363L338 354Q352 344 366 334T382 323Q457 264 457 174Q457 95 399 37T249 -22Q159 -22 101 29T43 155Q43 263 172 335L154 348Q133 361 127 368Q70 417 70 494ZM286 386L292 390Q298 394 301 396T311 403T323 413T334 425T345 438T355 454T364 471T369 491T371 513Q371 556 342 586T275 624Q268 625 242 625Q201 625 165 599T128 534Q128 511 141 492T167 463T217 431Q224 426 228 424L286 386ZM250 21Q308 21 350 55T392 137Q392 154 387 169T375 194T353 216T330 234T301 253T274 270Q260 279 244 289T218 306L210 311Q204 311 181 294T133 239T107 157Q107 98 150 60T250 21Z",[530,873],{"id":874,"d":875},"MJX-5-TEX-N-3D","M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z",[530,877],{"id":878,"d":879},"MJX-5-TEX-N-33","M127 463Q100 463 85 480T69 524Q69 579 117 622T233 665Q268 665 277 664Q351 652 390 611T430 522Q430 470 396 421T302 350L299 348Q299 347 308 345T337 336T375 315Q457 262 457 175Q457 96 395 37T238 -22Q158 -22 100 21T42 130Q42 158 60 175T105 193Q133 193 151 175T169 130Q169 119 166 110T159 94T148 82T136 74T126 70T118 67L114 66Q165 21 238 21Q293 21 321 74Q338 107 338 175V195Q338 290 274 322Q259 328 213 329L171 330L168 332Q166 335 166 348Q166 366 174 366Q202 366 232 371Q266 376 294 413T322 525V533Q322 590 287 612Q265 626 240 626Q208 626 181 615T143 592T132 580H135Q138 579 143 578T153 573T165 566T175 555T183 540T186 520Q186 498 172 481T127 463Z",[551,881,882],{"stroke":553,"fill":553,"stroke-width":554,"transform":555},[551,883,884,889,894,908,914,922],{"dataMmlNode":558},[551,885,886],{"dataMmlNode":561},[563,887],{"dataC":565,"xLinkHref":888},"#MJX-5-TEX-I-1D459",[551,890,891],{"dataMmlNode":561,"transform":569},[563,892],{"dataC":572,"xLinkHref":893},"#MJX-5-TEX-I-1D45C",[551,895,896,901],{"dataMmlNode":576,"transform":577},[551,897,898],{"dataMmlNode":561},[563,899],{"dataC":582,"xLinkHref":900},"#MJX-5-TEX-I-1D454",[551,902,903],{"dataMmlNode":659,"transform":587,"dataMjxTexclass":660},[551,904,905],{"dataMmlNode":586},[563,906],{"dataC":590,"xLinkHref":907},"#MJX-5-TEX-N-32",[551,909,910],{"dataMmlNode":586,"transform":594},[563,911],{"dataC":912,"xLinkHref":913},"38","#MJX-5-TEX-N-38",[551,915,918],{"dataMmlNode":916,"transform":917},"mo","translate(2474.3,0)",[563,919],{"dataC":920,"xLinkHref":921},"3D","#MJX-5-TEX-N-3D",[551,923,925],{"dataMmlNode":586,"transform":924},"translate(3530.1,0)",[563,926],{"dataC":927,"xLinkHref":928},"33","#MJX-5-TEX-N-33"," потому что ",[511,931,933],{"className":932,"jax":515},[514],[517,934,939,957],{"style":935,"xmlns":520,"width":936,"height":937,"role":484,"focusable":523,"viewBox":938,"xmlnsXLink":525},"vertical-align: -0.186ex;","6.896ex","2.071ex","0 -833.2 3048.1 915.2",[527,940,941,944,947,950,953],{},[530,942],{"id":943,"d":545},"MJX-6-TEX-N-32",[530,945],{"id":946,"d":879},"MJX-6-TEX-N-33",[530,948],{"id":949,"d":875},"MJX-6-TEX-N-3D",[530,951],{"id":952,"d":871},"MJX-6-TEX-N-38",[530,954],{"id":955,"d":956},"MJX-6-TEX-N-2E","M78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60Z",[551,958,959],{"stroke":553,"fill":553,"stroke-width":554,"transform":555},[551,960,961,975,981],{"dataMmlNode":558},[551,962,964,969],{"dataMmlNode":963},"msup",[551,965,966],{"dataMmlNode":586},[563,967],{"dataC":590,"xLinkHref":968},"#MJX-6-TEX-N-32",[551,970,972],{"dataMmlNode":586,"transform":971},"translate(533,363) scale(0.707)",[563,973],{"dataC":927,"xLinkHref":974},"#MJX-6-TEX-N-33",[551,976,978],{"dataMmlNode":916,"transform":977},"translate(1214.3,0)",[563,979],{"dataC":920,"xLinkHref":980},"#MJX-6-TEX-N-3D",[551,982,984,987],{"dataMmlNode":586,"transform":983},"translate(2270.1,0)",[563,985],{"dataC":912,"xLinkHref":986},"#MJX-6-TEX-N-38",[563,988],{"dataC":989,"xLinkHref":990,"transform":671},"2E","#MJX-6-TEX-N-2E","\nДля списка из 512 элементов с применением алгоритма бинарного поиска потребуется: ",[511,993,995],{"className":994,"jax":515},[514],[517,996,999,1027],{"style":519,"xmlns":520,"width":997,"height":522,"role":484,"focusable":523,"viewBox":998,"xmlnsXLink":525},"11.38ex","0 -694 5030.1 899",[527,1000,1001,1004,1007,1010,1013,1017,1020,1023],{},[530,1002],{"id":1003,"d":533},"MJX-7-TEX-I-1D459",[530,1005],{"id":1006,"d":537},"MJX-7-TEX-I-1D45C",[530,1008],{"id":1009,"d":541},"MJX-7-TEX-I-1D454",[530,1011],{"id":1012,"d":545},"MJX-7-TEX-N-32",[530,1014],{"id":1015,"d":1016},"MJX-7-TEX-N-35","M164 157Q164 133 148 117T109 101H102Q148 22 224 22Q294 22 326 82Q345 115 345 210Q345 313 318 349Q292 382 260 382H254Q176 382 136 314Q132 307 129 306T114 304Q97 304 95 310Q93 314 93 485V614Q93 664 98 664Q100 666 102 666Q103 666 123 658T178 642T253 634Q324 634 389 662Q397 666 402 666Q410 666 410 648V635Q328 538 205 538Q174 538 149 544L139 546V374Q158 388 169 396T205 412T256 420Q337 420 393 355T449 201Q449 109 385 44T229 -22Q148 -22 99 32T50 154Q50 178 61 192T84 210T107 214Q132 214 148 197T164 157Z",[530,1018],{"id":1019,"d":631},"MJX-7-TEX-N-31",[530,1021],{"id":1022,"d":875},"MJX-7-TEX-N-3D",[530,1024],{"id":1025,"d":1026},"MJX-7-TEX-N-39","M352 287Q304 211 232 211Q154 211 104 270T44 396Q42 412 42 436V444Q42 537 111 606Q171 666 243 666Q245 666 249 666T257 665H261Q273 665 286 663T323 651T370 619T413 560Q456 472 456 334Q456 194 396 97Q361 41 312 10T208 -22Q147 -22 108 7T68 93T121 149Q143 149 158 135T173 96Q173 78 164 65T148 49T135 44L131 43Q131 41 138 37T164 27T206 22H212Q272 22 313 86Q352 142 352 280V287ZM244 248Q292 248 321 297T351 430Q351 508 343 542Q341 552 337 562T323 588T293 615T246 625Q208 625 181 598Q160 576 154 546T147 441Q147 358 152 329T172 282Q197 248 244 248Z",[551,1028,1029],{"stroke":553,"fill":553,"stroke-width":554,"transform":555},[551,1030,1031,1036,1041,1055,1066,1072],{"dataMmlNode":558},[551,1032,1033],{"dataMmlNode":561},[563,1034],{"dataC":565,"xLinkHref":1035},"#MJX-7-TEX-I-1D459",[551,1037,1038],{"dataMmlNode":561,"transform":569},[563,1039],{"dataC":572,"xLinkHref":1040},"#MJX-7-TEX-I-1D45C",[551,1042,1043,1048],{"dataMmlNode":576,"transform":577},[551,1044,1045],{"dataMmlNode":561},[563,1046],{"dataC":582,"xLinkHref":1047},"#MJX-7-TEX-I-1D454",[551,1049,1050],{"dataMmlNode":659,"transform":587,"dataMjxTexclass":660},[551,1051,1052],{"dataMmlNode":586},[563,1053],{"dataC":590,"xLinkHref":1054},"#MJX-7-TEX-N-32",[551,1056,1057,1061,1064],{"dataMmlNode":586,"transform":594},[563,1058],{"dataC":1059,"xLinkHref":1060},"35","#MJX-7-TEX-N-35",[563,1062],{"dataC":665,"xLinkHref":1063,"transform":671},"#MJX-7-TEX-N-31",[563,1065],{"dataC":590,"xLinkHref":1054,"transform":681},[551,1067,1069],{"dataMmlNode":916,"transform":1068},"translate(3474.3,0)",[563,1070],{"dataC":920,"xLinkHref":1071},"#MJX-7-TEX-N-3D",[551,1073,1075],{"dataMmlNode":586,"transform":1074},"translate(4530.1,0)",[563,1076],{"dataC":1077,"xLinkHref":1078},"39","#MJX-7-TEX-N-39",[511,1080,1082],{"className":1081,"jax":515},[514],[517,1083,1087,1107],{"style":935,"xmlns":520,"width":1084,"height":1085,"role":484,"focusable":523,"viewBox":1086,"xmlnsXLink":525},"9.159ex","2.072ex","0 -833.9 4048.1 915.9",[527,1088,1089,1092,1095,1098,1101,1104],{},[530,1090],{"id":1091,"d":545},"MJX-8-TEX-N-32",[530,1093],{"id":1094,"d":1026},"MJX-8-TEX-N-39",[530,1096],{"id":1097,"d":875},"MJX-8-TEX-N-3D",[530,1099],{"id":1100,"d":1016},"MJX-8-TEX-N-35",[530,1102],{"id":1103,"d":631},"MJX-8-TEX-N-31",[530,1105],{"id":1106,"d":956},"MJX-8-TEX-N-2E",[551,1108,1109],{"stroke":553,"fill":553,"stroke-width":554,"transform":555},[551,1110,1111,1123,1128],{"dataMmlNode":558},[551,1112,1113,1118],{"dataMmlNode":963},[551,1114,1115],{"dataMmlNode":586},[563,1116],{"dataC":590,"xLinkHref":1117},"#MJX-8-TEX-N-32",[551,1119,1120],{"dataMmlNode":586,"transform":971},[563,1121],{"dataC":1077,"xLinkHref":1122},"#MJX-8-TEX-N-39",[551,1124,1125],{"dataMmlNode":916,"transform":977},[563,1126],{"dataC":920,"xLinkHref":1127},"#MJX-8-TEX-N-3D",[551,1129,1130,1133,1136,1138],{"dataMmlNode":586,"transform":983},[563,1131],{"dataC":1059,"xLinkHref":1132},"#MJX-8-TEX-N-35",[563,1134],{"dataC":665,"xLinkHref":1135,"transform":671},"#MJX-8-TEX-N-31",[563,1137],{"dataC":590,"xLinkHref":1117,"transform":681},[563,1139],{"dataC":989,"xLinkHref":1140,"transform":1141},"#MJX-8-TEX-N-2E","translate(1500,0)","\nСледовательно, для списка из 512 чисел придётся проверить не более 9 чисел.",[604,1144,1145],{},[411,1146,1147],{},"Бинарный поиск работает только в отсортированных последовательностях элементов. Но что произойдет если элементы не будут отсортированы?",[411,1149,1150],{},"Рассмотрим, как запрограммировать реализацию бинарного поиска на Python. В следующем примере кода используется список.",[604,1152,1153],{},[411,1154,1155],{},"Поскольку в Python массивы называются списками, термины массив и список часто используются как взаимозаменяемые. Но в реализациях алгоритмов на различных языках программирования могут быть отличия при создании списков(с возможностью увеличения количества элементов) либо массивов(с заранее ограниченным числом элементов).",[411,1157,1158,1159,1163],{},"Чтобы понять работу самого алгоритма, нам достаточно пока будет знать, что серию элементов можно сохранить в непрерывной последовательности ячеек, которая называется массивом.\nНумерация ячеек в которых хранятся сами элементы массива начинается с 0: первая ячейка имеет позицию с индексом(номером) 0, вторая — в позиции 1 и так далее.\nДля реализации любых алгоритмов лучше всего написать функцию. Что такое функции? Также минимум нужно знать, что они принимают значения(например массив) и внутри себя что-то с ними делают и наконец возвращают результат.\nФункцию так и назовём ",[1160,1161,1162],"code",{},"binary_search",", которая будет получать на вход отсортированный массив(список) и значение. Если значение присутствует в массиве, то функция возвращает его позицию(номер или индекс).\nПри этом мы должны следить внутри функции за тем, в какой части массива проводится поиск. В самом начале это весь массив:",[1165,1166,1171],"pre",{"className":1167,"code":1168,"language":1169,"meta":1170,"style":1170},"language-python shiki shiki-themes github-light","low = 0\nhigh = len(my_list) - 1\n","python","",[1160,1172,1173,1190],{"__ignoreMap":1170},[1174,1175,1178,1182,1186],"span",{"class":1176,"line":1177},"line",1,[1174,1179,1181],{"class":1180},"sgsFI","low ",[1174,1183,1185],{"class":1184},"sD7c4","=",[1174,1187,1189],{"class":1188},"sYu0t"," 0\n",[1174,1191,1193,1196,1198,1201,1204,1207],{"class":1176,"line":1192},2,[1174,1194,1195],{"class":1180},"high ",[1174,1197,1185],{"class":1184},[1174,1199,1200],{"class":1188}," len",[1174,1202,1203],{"class":1180},"(my_list) ",[1174,1205,1206],{"class":1184},"-",[1174,1208,1209],{"class":1188}," 1\n",[411,1211,1212],{},[484,1213],{"alt":1214,"src":1215},"Использование бинарного поиска","\u002Fimages\u002Fblog\u002Fpython\u002Fst24\u002Fimg3.png",[411,1217,1218],{},"Каждый раз алгоритм проверят средний элемент:",[1165,1220,1222],{"className":1167,"code":1221,"language":1169,"meta":1170,"style":1170},"mid = (low + high) \u002F\u002F 2\nguess = my_list[mid]\n",[1160,1223,1224,1246],{"__ignoreMap":1170},[1174,1225,1226,1229,1231,1234,1237,1240,1243],{"class":1176,"line":1177},[1174,1227,1228],{"class":1180},"mid ",[1174,1230,1185],{"class":1184},[1174,1232,1233],{"class":1180}," (low ",[1174,1235,1236],{"class":1184},"+",[1174,1238,1239],{"class":1180}," high) ",[1174,1241,1242],{"class":1184},"\u002F\u002F",[1174,1244,1245],{"class":1188}," 2\n",[1174,1247,1248,1251,1253],{"class":1176,"line":1192},[1174,1249,1250],{"class":1180},"guess ",[1174,1252,1185],{"class":1184},[1174,1254,1255],{"class":1180}," my_list[mid]\n",[411,1257,1258],{},"Если названое число было слишком велико, то переменная high обновляется:",[1165,1260,1262],{"className":1167,"code":1261,"language":1169,"meta":1170,"style":1170},"if guess > item:\n    high = mid - 1\n",[1160,1263,1264,1278],{"__ignoreMap":1170},[1174,1265,1266,1269,1272,1275],{"class":1176,"line":1177},[1174,1267,1268],{"class":1184},"if",[1174,1270,1271],{"class":1180}," guess ",[1174,1273,1274],{"class":1184},">",[1174,1276,1277],{"class":1180}," item:\n",[1174,1279,1280,1283,1285,1288,1290],{"class":1176,"line":1192},[1174,1281,1282],{"class":1180},"    high ",[1174,1284,1185],{"class":1184},[1174,1286,1287],{"class":1180}," mid ",[1174,1289,1206],{"class":1184},[1174,1291,1209],{"class":1188},[411,1293,1294],{},"А если догадка была слишком мала, то обновляется переменная low.",[411,1296,1297],{},"Полный код выглядит так:",[1165,1299,1301],{"className":1167,"code":1300,"language":1169,"meta":1170,"style":1170},"def search_iterative(my_list, item):\n  # в переменных low и high хранятся границы той части списка, в которой выполняется поиск\n  low = 0\n  high = len(my_list) - 1\n  # Пока эта часть не сократится до одного элемента ...\n  while low \u003C= high:\n    # ... проверяем средний элемент\n    mid = (low + high) \u002F\u002F 2\n    guess = my_list[mid]\n    # Если значение найдено возвращаем его номер(индекс списка)\n    if guess == item:\n      return mid\n    # Если найдено значение больше - уменьшаем верхний индекс(границу)\n    if guess > item:\n      high = mid - 1\n    # Если найдено значение меньше - увеличиваем нижний индекс(границу)\n    else:\n      low = mid + 1\n  # Элемент не найден\n  return None\n",[1160,1302,1303,1315,1321,1331,1347,1353,1368,1374,1392,1402,1408,1421,1430,1436,1447,1461,1467,1476,1490,1496],{"__ignoreMap":1170},[1174,1304,1305,1308,1312],{"class":1176,"line":1177},[1174,1306,1307],{"class":1184},"def",[1174,1309,1311],{"class":1310},"s7eDp"," search_iterative",[1174,1313,1314],{"class":1180},"(my_list, item):\n",[1174,1316,1317],{"class":1176,"line":1192},[1174,1318,1320],{"class":1319},"sAwPA","  # в переменных low и high хранятся границы той части списка, в которой выполняется поиск\n",[1174,1322,1324,1327,1329],{"class":1176,"line":1323},3,[1174,1325,1326],{"class":1180},"  low ",[1174,1328,1185],{"class":1184},[1174,1330,1189],{"class":1188},[1174,1332,1334,1337,1339,1341,1343,1345],{"class":1176,"line":1333},4,[1174,1335,1336],{"class":1180},"  high ",[1174,1338,1185],{"class":1184},[1174,1340,1200],{"class":1188},[1174,1342,1203],{"class":1180},[1174,1344,1206],{"class":1184},[1174,1346,1209],{"class":1188},[1174,1348,1350],{"class":1176,"line":1349},5,[1174,1351,1352],{"class":1319},"  # Пока эта часть не сократится до одного элемента ...\n",[1174,1354,1356,1359,1362,1365],{"class":1176,"line":1355},6,[1174,1357,1358],{"class":1184},"  while",[1174,1360,1361],{"class":1180}," low ",[1174,1363,1364],{"class":1184},"\u003C=",[1174,1366,1367],{"class":1180}," high:\n",[1174,1369,1371],{"class":1176,"line":1370},7,[1174,1372,1373],{"class":1319},"    # ... проверяем средний элемент\n",[1174,1375,1377,1380,1382,1384,1386,1388,1390],{"class":1176,"line":1376},8,[1174,1378,1379],{"class":1180},"    mid ",[1174,1381,1185],{"class":1184},[1174,1383,1233],{"class":1180},[1174,1385,1236],{"class":1184},[1174,1387,1239],{"class":1180},[1174,1389,1242],{"class":1184},[1174,1391,1245],{"class":1188},[1174,1393,1395,1398,1400],{"class":1176,"line":1394},9,[1174,1396,1397],{"class":1180},"    guess ",[1174,1399,1185],{"class":1184},[1174,1401,1255],{"class":1180},[1174,1403,1405],{"class":1176,"line":1404},10,[1174,1406,1407],{"class":1319},"    # Если значение найдено возвращаем его номер(индекс списка)\n",[1174,1409,1411,1414,1416,1419],{"class":1176,"line":1410},11,[1174,1412,1413],{"class":1184},"    if",[1174,1415,1271],{"class":1180},[1174,1417,1418],{"class":1184},"==",[1174,1420,1277],{"class":1180},[1174,1422,1424,1427],{"class":1176,"line":1423},12,[1174,1425,1426],{"class":1184},"      return",[1174,1428,1429],{"class":1180}," mid\n",[1174,1431,1433],{"class":1176,"line":1432},13,[1174,1434,1435],{"class":1319},"    # Если найдено значение больше - уменьшаем верхний индекс(границу)\n",[1174,1437,1439,1441,1443,1445],{"class":1176,"line":1438},14,[1174,1440,1413],{"class":1184},[1174,1442,1271],{"class":1180},[1174,1444,1274],{"class":1184},[1174,1446,1277],{"class":1180},[1174,1448,1450,1453,1455,1457,1459],{"class":1176,"line":1449},15,[1174,1451,1452],{"class":1180},"      high ",[1174,1454,1185],{"class":1184},[1174,1456,1287],{"class":1180},[1174,1458,1206],{"class":1184},[1174,1460,1209],{"class":1188},[1174,1462,1464],{"class":1176,"line":1463},16,[1174,1465,1466],{"class":1319},"    # Если найдено значение меньше - увеличиваем нижний индекс(границу)\n",[1174,1468,1470,1473],{"class":1176,"line":1469},17,[1174,1471,1472],{"class":1184},"    else",[1174,1474,1475],{"class":1180},":\n",[1174,1477,1479,1482,1484,1486,1488],{"class":1176,"line":1478},18,[1174,1480,1481],{"class":1180},"      low ",[1174,1483,1185],{"class":1184},[1174,1485,1287],{"class":1180},[1174,1487,1236],{"class":1184},[1174,1489,1209],{"class":1188},[1174,1491,1493],{"class":1176,"line":1492},19,[1174,1494,1495],{"class":1319},"  # Элемент не найден\n",[1174,1497,1499,1502],{"class":1176,"line":1498},20,[1174,1500,1501],{"class":1184},"  return",[1174,1503,1504],{"class":1188}," None\n",[411,1506,1507],{},"После того как создали функцию, можно её протестировать:",[1165,1509,1511],{"className":1167,"code":1510,"language":1169,"meta":1170,"style":1170},"my_list = [1, 3, 5, 7, 9]  # Список с отсортированными элементами(обязательно по возрастанию)\nprint(search_iterative(my_list, 3)) # => 1 — нумерация с 0.\n# \"None\" в Python означает ничего. Мы используем для обозначения того, что элемент не найден.\nprint(search_iterative(my_list, -1)) # => None\n",[1160,1512,1513,1553,1569,1574],{"__ignoreMap":1170},[1174,1514,1515,1518,1520,1523,1526,1529,1532,1534,1537,1539,1542,1544,1547,1550],{"class":1176,"line":1177},[1174,1516,1517],{"class":1180},"my_list ",[1174,1519,1185],{"class":1184},[1174,1521,1522],{"class":1180}," [",[1174,1524,1525],{"class":1188},"1",[1174,1527,1528],{"class":1180},", ",[1174,1530,1531],{"class":1188},"3",[1174,1533,1528],{"class":1180},[1174,1535,1536],{"class":1188},"5",[1174,1538,1528],{"class":1180},[1174,1540,1541],{"class":1188},"7",[1174,1543,1528],{"class":1180},[1174,1545,1546],{"class":1188},"9",[1174,1548,1549],{"class":1180},"]  ",[1174,1551,1552],{"class":1319},"# Список с отсортированными элементами(обязательно по возрастанию)\n",[1174,1554,1555,1558,1561,1563,1566],{"class":1176,"line":1192},[1174,1556,1557],{"class":1188},"print",[1174,1559,1560],{"class":1180},"(search_iterative(my_list, ",[1174,1562,1531],{"class":1188},[1174,1564,1565],{"class":1180},")) ",[1174,1567,1568],{"class":1319},"# => 1 — нумерация с 0.\n",[1174,1570,1571],{"class":1176,"line":1323},[1174,1572,1573],{"class":1319},"# \"None\" в Python означает ничего. Мы используем для обозначения того, что элемент не найден.\n",[1174,1575,1576,1578,1580,1582,1584,1586],{"class":1176,"line":1333},[1174,1577,1557],{"class":1188},[1174,1579,1560],{"class":1180},[1174,1581,1206],{"class":1184},[1174,1583,1525],{"class":1188},[1174,1585,1565],{"class":1180},[1174,1587,1588],{"class":1319},"# => None\n",[411,1590,1591,1592,1595,1596,1599],{},"Попробуйте сами скопировать и запустить код в окне ниже с интерпретатором Python и повторите примеры из статьи чтобы самим увидеть и понять как всё это работает.\nДля этого в ячейке с кодом нажмите клавиши на клавиатуре ",[414,1593,1594],{},"Shift+Enter"," или запустите код через ",[414,1597,1598],{},"кнопку Run"," по значку ▶.",[1601,1602],"jypiter",{},[411,1604,1605],{},"Полную реализацию алгоритма вы можете скачать ниже по ссылке(скачать файл):",[1607,1608],"downloadlink",{"address":1609,"description":1610},"\u002Ffiles\u002Fpython\u002Fst21\u002Fbinary_search.py","Скачать файл",[604,1612,1613],{},[411,1614,1615],{},"Если скачали и увидели реализацию алгоритма с помощью \"рекурсии\" и создание класса? Чтобы понять эту реализацию бинарного поиска, нужно разобраться отдельно что же такое рекурсивные алгоритмы и создание классов в Python.",[604,1617,1618],{},[411,1619,1620],{},"Двоичный поиск является одной из реализаций техники построения алгоритмов под названием разделяй и властвуй (divide and conquer, D&C).\nАлгоритмы D&C решают одну или более независимых подзадач, после чего совмещают их решения для поиска решения исходной задачи (двоичный поиск решает только одну подзадачу,\nсоответствующую той части входных данных, о которой известно, что она содержит решение, в то время как другие алгоритм D&C обычно решают две или более подзадач).\nЧтобы больше узнать об этом семействе алгоритмов и некоторых задачах, которые они эффективно решают, советую книгу Тима Рафгардена(Tim Roughgarden) Совершенный алгоритм. Основы. СПб.: Питер.",[1622,1623],"card-collapsible-num-answers",{":isAnswers":1624,":isList":1625,"title":1626},"[\"8\",\"9\"]","[\"Имеется отсортированный список из 250 имён, вы ищите в нём значение методом бинарного поиска. Какое максимальное количество проверок для этого может потребоваться?\",\"Предположим, размер списка увеличился вдвое. Как измениться максимальное количество проверок?\"]","УПРАЖНЕНИЯ",[406,1628,1630],{"id":1629},"время-выполнения-алгоритмов","Время выполнения алгоритмов",[411,1632,1633],{},"Каждый раз, когда я буду описывать очередной алгоритм, я буду отмечать время его выполнения.\nОбычно следует выбирать самый эффективный алгоритм при решении задач, будь то оптимизация по времени или памяти.",[411,1635,1636,1637,1642,1643,1646,1647,1642,1652,1655],{},"Обсудим время выполнения бинарного поиска. Если список состоит из 100 элементов, то при линейном поиске может потребоваться до 100 попыток.\nДля списка из 4 миллиардов элементов(чисел) потребуется до 4 миллиардов попыток. Таким образом, максимальное количество попыток соответствует размеру массива(списка).\nТакое время выполнение называется ",[417,1638,1639],{},[414,1640,1641],{},"линейным"," и обозначается как ",[414,1644,1645],{},"O(n)",". С бинарным поиском дело обстоит иначе. Если список состоит из 100 элементов, потребуется не более 7 попыток.\nДля списка из 4 миллиардов элементов потребуется не более 32 попыток. Соответственно бинарный поиск выполняется за ",[417,1648,1649],{},[414,1650,1651],{},"логарифмическое время",[414,1653,1654],{},"O(lbn)"," (имеется ввиду двоичный логарифм — логарифм по основанию 2).",[1657,1658,1660],"h4",{"id":1659},"о-большое","\"О-большое\"",[411,1662,1663],{},"Специальная нотация \"О-большое\" описывает скорость работы алгоритма. Зачем это нужно?\nВремя от времени всем программистам приходится использовать различные алгоритмы при решении задач.\nНеплохо было бы понимать, насколько быстро или медленно они работают.\nНиже разберём что представляет собой \"О-большое\" и приведём несколько примеров распространённых вариантов времени выполнения для некоторых алгоритмов.",[1665,1666,1668],"h5",{"id":1667},"время-выполнения-растёт-с-разной-скоростью","Время выполнения растёт с разной скоростью",[411,1670,1671],{},"Допустим Иван пишет алгоритм поиска для Роскосмоса. Его алгоритм работает, когда ракета будет подлетать к луне и поможет вычислить точку посадки.\nИван пытается выбрать между линейным и бинарным поиском. Его алгоритм должен работать быстро и правильно. У Ивана есть 10 секунд, чтобы выбрать место посадки.\nЕсли он не уложится в это время, то момент для посадки будет упущен.\nС одной стороны бинарный поиск работает быстрее, с другой стороны, линейный поиск пишется проще и вероятность ошибки в нём ниже...\nКонечно же, Иван не хочет допустить ошибку в коде посадки ракеты. И тогда для лучшей уверенности он решает измерить время выполнения обоих алгоритмов для списка из 100 элементов.",[411,1673,1674],{},"Допустим, проверка одного элемента занимает 1 миллисекунду (мс). При простом поиске Ивану придётся проверить 100 элементов, и поиск займёт 100 мс.\nС другой стороны, при бинарном поиске достаточно проверить всего 7 элементов(lb100 равен приблизительно 7), а поиск займёт 7 мс.\nНо реальный список может содержать более миллиарда элементов.\nСколько времени в таком случае потребуется для выполнения простого поиска? А при бинарном поиске?\nОбязательно попробуйте ответить на два этих вопроса прежде чем продолжить чтение дальше.",[411,1676,1677],{},"Иван проводит бинарный поиск с 1 миллиардом элементов, и на это уходит 30 мс(lb2 1000000000 равен примерно 30).\nИван думает, что бинарный поиск в 15 раз быстрее простого, потому что линейный поиск для 100 элементов занял 100 мс, а бинарный всего 7 мс.\nЗначит, линейный поиск с 1 миллиардом элементов займёт 30 * 15 = 450 мс, так? Гораздо меньше отведённых 10 секунд?\nИ Иван выбирает линейный поиск. Верен ли его выбор?",[411,1679,1680],{},"Нет, Иван ошибается. Время выполнения простого поиска с 1 миллиардом элементов составит миллиард миллисекунд, а это 11 дней!\nПроблема в том, что время выполнения для бинарного и линейного поиска растёт с разной скоростью!",[1682,1683,1684,1699],"table",{},[1685,1686,1687],"thead",{},[1688,1689,1690,1694,1697],"tr",{},[1691,1692,1693],"th",{},"Количество элементов",[1691,1695,1696],{},"Линейный поиск",[1691,1698,455],{},[1700,1701,1702,1714,1725],"tbody",{},[1688,1703,1704,1708,1711],{},[1705,1706,1707],"td",{},"100",[1705,1709,1710],{},"100 мс",[1705,1712,1713],{},"7 мс",[1688,1715,1716,1719,1722],{},[1705,1717,1718],{},"10 000",[1705,1720,1721],{},"10 сек",[1705,1723,1724],{},"14 мс",[1688,1726,1727,1730,1733],{},[1705,1728,1729],{},"1 000 000 000",[1705,1731,1732],{},"11 дней",[1705,1734,1735],{},"30 мс",[411,1737,1738],{},"Время выполнения растёт с совершенно разной скоростью!",[411,1740,1741],{},"Простыми словами, с увеличением количества элементов бинарный поиск займёт чуть больше времени, тогда как линейный займёт гораздо больше времени!\nЕсли список состоит из 1 миллиарда элементов, то бинарный поиск работает приблизительно в 33 миллиона раз быстрее линейного!\nВот почему недостаточно знать, сколько времени отработает алгоритм — необходимо знать, как возрастает время выполнения с ростом размера количества выполняемых им операций.\n\"О-большое\" как раз описывает, насколько быстро работает алгоритм.\nПредположим, имеется список размера n. Время выполнения \"О-большое\" простого линейного поиска в общем случае выглядит как:",[411,1743,1744],{},[484,1745],{"alt":1746,"src":1747},"Время выполнения линейного поиска","\u002Fimages\u002Fblog\u002Fpython\u002Fst24\u002Fimg4.png",[411,1749,1750],{},"Такая запись сообщает количество операций, которые придётся выполнить алгоритму.\nОна называется \"О-большое\", потому что перед количеством операций ставиться символ \"О\"(большое потому что в верхнем регистре).",[411,1752,1753],{},"Теперь рассмотрим несколько примеров и попробуем оценить время выполнения алгоритмов.",[1665,1755,1757],{"id":1756},"наглядное-представление-о-большое","Наглядное представление \"О-большое\"",[411,1759,1760],{},"Допустим вы должны построить сетку из 16 квадратов. Для этого достаточно иметь несколько листков бумаги и карандаш.",[411,1762,1763],{},[484,1764],{"alt":1765,"src":1766},"Сетка 4*4","\u002Fimages\u002Fblog\u002Fpython\u002Fst24\u002Fimg5.png",[411,1768,1769],{},"Как должен выглядеть алгоритм построения такой сетки?",[1771,1772,1774],"h6",{"id":1773},"алгоритм-1","Алгоритм 1",[411,1776,1777],{},"Нарисовать 16 квадратов, по одному за раз. В данном примере рисование квадрата считается одной операцией.\nНужно нарисовать 16 квадратов. Сколько операций по рисованию квадрата придётся выполнить?\nЧтобы нарисовать 16 квадратов, потребуется 16 шагов. Как выглядит время выполнения алгоритма?",[411,1779,1780],{},"Ответ: O(n).",[1771,1782,1784],{"id":1783},"алгоритм-2","Алгоритм 2",[411,1786,1787],{},"А теперь попробуем так. Сложите лист пополам. На этот раз операцией считается сложение листка.\nПолучается, что одна операция создаёт сразу два прямоугольника.\nСложите затем ещё раз, а потом ещё и ещё.\nИ наконец, разверните листок после четырёх сложений — получилась сетка! Каждое сложение удваивает количество прямоугольников.\nПолучилось, что за 4 операции создаётся 16 прямоугольников! При каждом складывании количество прямоугольников увеличивается вдвое!\nКак записать время выполнения этого алгоритма?",[411,1789,1790,1791],{},"Ответ: ",[511,1792,1794],{"className":1793,"jax":515},[514],[517,1795,1800,1836],{"style":1796,"xmlns":520,"width":1797,"height":1798,"role":484,"focusable":523,"viewBox":1799,"xmlnsXLink":525},"vertical-align: -0.566ex;","12.313ex","2.262ex","0 -750 5442.6 1000",[527,1801,1802,1806,1810,1813,1816,1819,1823,1827,1830,1833],{},[530,1803],{"id":1804,"d":1805},"MJX-9-TEX-I-1D442","M740 435Q740 320 676 213T511 42T304 -22Q207 -22 138 35T51 201Q50 209 50 244Q50 346 98 438T227 601Q351 704 476 704Q514 704 524 703Q621 689 680 617T740 435ZM637 476Q637 565 591 615T476 665Q396 665 322 605Q242 542 200 428T157 216Q157 126 200 73T314 19Q404 19 485 98T608 313Q637 408 637 476Z",[530,1807],{"id":1808,"d":1809},"MJX-9-TEX-N-28","M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z",[530,1811],{"id":1812,"d":533},"MJX-9-TEX-I-1D459",[530,1814],{"id":1815,"d":744},"MJX-9-TEX-I-1D44F",[530,1817],{"id":1818,"d":549},"MJX-9-TEX-I-1D45B",[530,1820],{"id":1821,"d":1822},"MJX-9-TEX-N-29","M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z",[530,1824],{"id":1825,"d":1826},"MJX-9-TEX-N-7C","M139 -249H137Q125 -249 119 -235V251L120 737Q130 750 139 750Q152 750 159 735V-235Q151 -249 141 -249H139Z",[530,1828],{"id":1829,"d":537},"MJX-9-TEX-I-1D45C",[530,1831],{"id":1832,"d":541},"MJX-9-TEX-I-1D454",[530,1834],{"id":1835,"d":545},"MJX-9-TEX-N-32",[551,1837,1838],{"stroke":553,"fill":553,"stroke-width":554,"transform":555},[551,1839,1840,1846,1853,1859,1865,1871,1878,1885,1890,1896,1911],{"dataMmlNode":558},[551,1841,1842],{"dataMmlNode":561},[563,1843],{"dataC":1844,"xLinkHref":1845},"1D442","#MJX-9-TEX-I-1D442",[551,1847,1849],{"dataMmlNode":916,"transform":1848},"translate(763,0)",[563,1850],{"dataC":1851,"xLinkHref":1852},"28","#MJX-9-TEX-N-28",[551,1854,1856],{"dataMmlNode":561,"transform":1855},"translate(1152,0)",[563,1857],{"dataC":565,"xLinkHref":1858},"#MJX-9-TEX-I-1D459",[551,1860,1862],{"dataMmlNode":561,"transform":1861},"translate(1450,0)",[563,1863],{"dataC":764,"xLinkHref":1864},"#MJX-9-TEX-I-1D44F",[551,1866,1868],{"dataMmlNode":561,"transform":1867},"translate(1879,0)",[563,1869],{"dataC":597,"xLinkHref":1870},"#MJX-9-TEX-I-1D45B",[551,1872,1874],{"dataMmlNode":916,"transform":1873},"translate(2479,0)",[563,1875],{"dataC":1876,"xLinkHref":1877},"29","#MJX-9-TEX-N-29",[551,1879,1881],{"dataMmlNode":916,"transform":1880},"translate(2868,0) translate(0 -0.5)",[563,1882],{"dataC":1883,"xLinkHref":1884},"7C","#MJX-9-TEX-N-7C",[551,1886,1888],{"dataMmlNode":561,"transform":1887},"translate(3146,0)",[563,1889],{"dataC":565,"xLinkHref":1858},[551,1891,1893],{"dataMmlNode":561,"transform":1892},"translate(3444,0)",[563,1894],{"dataC":572,"xLinkHref":1895},"#MJX-9-TEX-I-1D45C",[551,1897,1899,1904],{"dataMmlNode":576,"transform":1898},"translate(3929,0)",[551,1900,1901],{"dataMmlNode":561},[563,1902],{"dataC":582,"xLinkHref":1903},"#MJX-9-TEX-I-1D454",[551,1905,1906],{"dataMmlNode":659,"transform":587,"dataMjxTexclass":660},[551,1907,1908],{"dataMmlNode":586},[563,1909],{"dataC":590,"xLinkHref":1910},"#MJX-9-TEX-N-32",[551,1912,1914],{"dataMmlNode":561,"transform":1913},"translate(4842.6,0)",[563,1915],{"dataC":597,"xLinkHref":1870},[1665,1917,1919],{"id":1918},"о-большое-всегда-определяет-время-в-худшем-случае","\"О-большое\" всегда определяет время в худшем случае",[411,1921,1922],{},"Предположим вы ищете в телефонной книге фамилию используя линейный(простой поиск).\nВы знаете что простой поиск выполняется за время O(n), то есть в худшем случае вам придётся просмотреть каждую запись без исключения.\nНо представьте что искомая фамилия начинается на букву \"А\" и этот человек которого вы ищите, стоит на самом первом месте в вашей телефонной книге.\nВам не пришлось(в этот раз) просматривать все записи — вы нашли сразу нужную фамилию человека которому собрались позвонить.\nОтработал ли алгоритм за время O(n)? Или он занял время O(1), потому что результат был получен с первой попытки поиска?",[411,1924,1925,1926,1931],{},"Простой поиск, всё равно как алгоритм, выполняется за время O(n). Просто в данном случае вам повезло и вы нашли сразу нужное значение.\n",[417,1927,1928],{},[414,1929,1930],{},"Однако нотация \"О-большое\" всегда описывает наихудший случай.","\nЗаписью O(n) фактически утверждается что придётся просмотреть каждую запись в телефонной книге по одной за раз.\nИ также запись O(n) даёт определённые гарантии — вы всегда уверены, что линейный(простой) поиск никогда не будет работать медленнее.",[604,1933,1934],{},[411,1935,1936],{},"Наряду с временем худшего случая нужно также учитывать среднее время выполнения. Тема худшего и среднего времени выполнения будет рассмотрена в следующих статьях.",[1665,1938,1940],{"id":1939},"примеры-о-большого","Примеры \"О-большого\"",[411,1942,1943],{},"Ниже приведём несколько примеров из пяти разновидностей \"О-большого, которые встречаются особенно часто, в порядке убывания скорости выполнения:",[434,1945,1946,1949,1952,1955,1958],{},[437,1947,1948],{},"O(lbn), или логарифмическое время. Пример: бинарный поиск.",[437,1950,1951],{},"O(n), или линейное время. Пример: простой поиск.",[437,1953,1954],{},"О(n * lbn). Пример: эффективные алгоритмы сортировки(быстрая сортировка).",[437,1956,1957],{},"О(n * n). Пример: медленные алгоритмы сортировки(сортировка выбором).",[437,1959,1960],{},"O(n!). Пример: очень медленные алгоритмы(задача о коммивояжере).",[411,1962,1963],{},"Допустим, вы снова строите сетку из 16 квадратов и можете выбрать для решения задачи один из пяти алгоритмов.\nПри использовании первого алгоритма сетка будет построена за время O(lbn).\nВ секунду выполняются до 10 операций. С временем O(lbn) для построения сетки из 16 квадратов потребуются 4 операции(lbn16 = 4).\nИтак, сетка будет построена за 0,4 секунды. А если бы было нужно построить 1024 квадрата? То O(lbn) = lb1024 = 10 операций или ровно 1 секунда.\nЭти числа получены при использовании первого алгоритма.",[411,1965,1966],{},"Второй алгоритм работает медленнее: за время O(n). Для построения 16 прямоугольников нужно 16 операций, а для построения 1024 прямоугольников — 1024 операции.\nСколько времени это займёт?",[411,1968,1969],{},"Ниже показано, сколько времени потребуется для построения сетки с остальными алгоритмами, от самого быстрого до самого медленного.",[411,1971,1972],{},[484,1973],{"alt":1630,"src":1974},"\u002Fimages\u002Fblog\u002Fpython\u002Fst24\u002Fimg6.png",[411,1976,1977],{},"Эти записи являются упрощением. На практике не всегда удаётся легко преобразовать время выполнения в количество операций в секунду с такой точностью.\nОсновные выводы:",[434,1979,1980,1983,1986,1989],{},[437,1981,1982],{},"Скорость алгоритмов измеряется не в секундах, а в темпе роста количества операций;",[437,1984,1985],{},"Формула в аннотации \"О-большое\" описывает, насколько быстро возрастает время выполнения алгоритма с увеличением размера входных данных;",[437,1987,1988],{},"Время выполнения алгоритмов выражается как \"О-большое\";",[437,1990,1991],{},"Время выполнения O(lbn) быстрее O(n). С увеличением размера массива(списка), в котором происходит поиск значения, оно кратно быстрее.",[1622,1993],{":isAnswers":1994,":isList":1995,":startOl":1531,"title":1626,"isText":1996},"[\"O(log n)\",\"O(n)\",\"O(n)\",\"O(n). Возможно, кто-то подумает: \\\"Я делаю это только для одной из 30 букв, а значит, время выполнения должно быть равно O(n\u002F30)\\\". Но для О-большого есть правило: игнорируются числа, задействованные в операциях сложения, вычитания, умножения или деления и т.п. 30 является просто константой в этом вопросе.\"]","[\"Известна фамилия, нужно найти номер в телефонной книге\",\"Известен номер, нужно найти фамилию в телефонной книге\",\"Нужно посчитать телефона всех людей в телефонной книге\",\"Нужно посчитать телефоны всех людей, фамилии которых начинаются с буквы \\\"А\\\"\"]","Назовите время выполнения \"О-большое\" для каждого из следующих сценариев",[1657,1998,2000],{"id":1999},"задача-о-коммивояжере","Задача о коммивояжере",[411,2002,2003],{},"Наверное после прочтения предыдущего раздела можно подумать, что нам точно не попадётся задача с алгоритмом времени выполнения O(n!).\nНо здесь как раз таки пойдёт информация о такой задаче с очень и очень плохим временем выполнения.\nЭто известная задача из области вычислений в которой время выполнения вырастает просто с ужасающей скоростью.\nНекоторые очень умные люди считают, что с этим ничего нельзя поделать. Это задача о коммивояжере.",[411,2005,2006],{},"Смысл задачи в следующем: коммивояжер должен объехать города, например пусть будет пять городов.\nКоммивояжер хочет побывать в каждом из 5 городов так, чтобы при это ещё проехать минимальное общее расстояние.\nОдно из возможных решений: перебрать все возможные комбинации порядка объезда городов.\nВсе расстояния суммируются, после чего выбирается путь с кратчайшим расстоянием.\nДля 5 городов можно создать 120 перестановок, поэтому решение задачи для 5 городов потребует 120 операций.\nДля 6 городов количество операций увеличивается до 720(существует уже 720 возможных перестановок).\nА для 7 городов потребуется уже 5040 операций! Количество операций стремительно растёт!",[1682,2008,2009,2019],{},[1685,2010,2011],{},[1688,2012,2013,2016],{},[1691,2014,2015],{},"Города",[1691,2017,2018],{},"Операции",[1700,2020,2021,2029,2036,2044],{},[1688,2022,2023,2026],{},[1705,2024,2025],{},"6",[1705,2027,2028],{},"720",[1688,2030,2031,2033],{},[1705,2032,1541],{},[1705,2034,2035],{},"5040",[1688,2037,2038,2041],{},[1705,2039,2040],{},"8",[1705,2042,2043],{},"40320",[1688,2045,2046,2049],{},[1705,2047,2048],{},"15",[1705,2050,2051],{},"1307674368000",[411,2053,2054,2055,2060],{},"В общем случае для вычисления результата при n элементах потребуется n-факториал операций.\nЗначит время выполнения составит O(n!) и такое время называется ",[417,2056,2057],{},[414,2058,2059],{},"факториальным",".\nМожно сделать вывод: если вы попытаетесь решить задачу для 100+ городов, то сделать этот вовремя не удастся.\nИ как бы ни было это печально, но у задачи коммивояжера нет другого решения!\nЭто одна из самых знаменитых задач в теории вычислений!\nСчитается что для этой задачи можно найти лишь приближенное решение(с помощью жадного алгоритма).",[411,2062,2063],{},[417,2064,2065],{},"P.S. Подробнее об остальных алгоритмов будет в следующих статьях.",[401,2067],{":isList":2068,"title":2069},"[\"Бинарный поиск работает намного быстрее простого;\",\"Скорость алгоритмов не измеряется в секундах\",\"Время выполнения алгоритма описывается ростом количества операций\",\"Время выполнения алгоритмов записывается в нотации \\\"О-большое\\\"\",\"Время выполнения O(lbn) быстрее O(n), с увеличением количества элементов по которым осуществляется поиск, оно(время) становится намного быстрее\"]","ШПАРГАЛКА",[2071,2072,2073],"style",{},"\nmjx-container[jax=\"SVG\"] {\n  direction: ltr;\n}\n\nmjx-container[jax=\"SVG\"] > svg {\n  overflow: visible;\n  min-height: 1px;\n  min-width: 1px;\n}\n\nmjx-container[jax=\"SVG\"] > svg a {\n  fill: blue;\n  stroke: blue;\n}\n\nmjx-container[jax=\"SVG\"][display=\"true\"] {\n  display: block;\n  text-align: center;\n  margin: 1em 0;\n}\n\nmjx-container[jax=\"SVG\"][display=\"true\"][width=\"full\"] {\n  display: flex;\n}\n\nmjx-container[jax=\"SVG\"][justify=\"left\"] {\n  text-align: left;\n}\n\nmjx-container[jax=\"SVG\"][justify=\"right\"] {\n  text-align: right;\n}\n\ng[data-mml-node=\"merror\"] > g {\n  fill: red;\n  stroke: red;\n}\n\ng[data-mml-node=\"merror\"] > rect[data-background] {\n  fill: yellow;\n  stroke: none;\n}\n\ng[data-mml-node=\"mtable\"] > line[data-line], svg[data-table] > g > line[data-line] {\n  stroke-width: 70px;\n  fill: none;\n}\n\ng[data-mml-node=\"mtable\"] > rect[data-frame], svg[data-table] > g > rect[data-frame] {\n  stroke-width: 70px;\n  fill: none;\n}\n\ng[data-mml-node=\"mtable\"] > .mjx-dashed, svg[data-table] > g > .mjx-dashed {\n  stroke-dasharray: 140;\n}\n\ng[data-mml-node=\"mtable\"] > .mjx-dotted, svg[data-table] > g > .mjx-dotted {\n  stroke-linecap: round;\n  stroke-dasharray: 0,140;\n}\n\ng[data-mml-node=\"mtable\"] > g > svg {\n  overflow: visible;\n}\n\n[jax=\"SVG\"] mjx-tool {\n  display: inline-block;\n  position: relative;\n  width: 0;\n  height: 0;\n}\n\n[jax=\"SVG\"] mjx-tool > mjx-tip {\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n\nmjx-tool > mjx-tip {\n  display: inline-block;\n  padding: .2em;\n  border: 1px solid #888;\n  font-size: 70%;\n  background-color: #F8F8F8;\n  color: black;\n  box-shadow: 2px 2px 5px #AAAAAA;\n}\n\ng[data-mml-node=\"maction\"][data-toggle] {\n  cursor: pointer;\n}\n\nmjx-status {\n  display: block;\n  position: fixed;\n  left: 1em;\n  bottom: 1em;\n  min-width: 25%;\n  padding: .2em .4em;\n  border: 1px solid #888;\n  font-size: 90%;\n  background-color: #F8F8F8;\n  color: black;\n}\n\nforeignObject[data-mjx-xml] {\n  font-family: initial;\n  line-height: normal;\n  overflow: visible;\n}\n\nmjx-container[jax=\"SVG\"] path[data-c], mjx-container[jax=\"SVG\"] use[data-c] {\n  stroke-width: 3;\n}\n",[2071,2075,2076],{},"html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}",{"title":1170,"searchDepth":1192,"depth":1349,"links":2078},[2079],{"id":399,"depth":1192,"text":254,"children":2080},[2081,2082,2083],{"id":408,"depth":1323,"text":409},{"id":454,"depth":1323,"text":455},{"id":1629,"depth":1323,"text":1630,"children":2084},[2085,2094],{"id":1659,"depth":1333,"text":1660,"children":2086},[2087,2088,2092,2093],{"id":1667,"depth":1349,"text":1668},{"id":1756,"depth":1349,"text":1757,"children":2089},[2090,2091],{"id":1773,"depth":1355,"text":1774},{"id":1783,"depth":1355,"text":1784},{"id":1918,"depth":1349,"text":1919},{"id":1939,"depth":1349,"text":1940},{"id":1999,"depth":1333,"text":2000},"2025-10-02","Введение. Реализация алгоритма бинарного поиска. Время выполнения алгоритмов","md","images\u002Fblog\u002Fpython\u002Fst24\u002Fimg.png",{},32,true,24,{"title":254,"description":2096},"d18iAe0IVcWhOOwFIH6Bh-Tj0iTuIJgvDNZ6ZFznuQg",[2106,2108],{"title":250,"path":251,"stem":252,"description":2107,"children":-1},"Что такое декораторы функций и как их использовать",{"title":258,"path":259,"stem":260,"description":2109,"children":-1},"Примеры задач с использованием бинарного(двоичного) поиска",1780737509753]