[{"data":1,"prerenderedAt":1901},["ShallowReactive",2],{"navigation":3,"/blog/python/st33":378,"/blog/python/st33-surround":1897},[4],{"title":5,"path":6,"stem":7,"children":8,"page":114},"Blog","/blog","blog",[9,115,184,321],{"title":10,"path":11,"stem":12,"children":13,"page":114},"Ege","/blog/ege","blog/ege",[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","/blog/ege/task1","blog/ege/task1",{"title":19,"path":20,"stem":21},"ЕГЭ Задание 10","/blog/ege/task10","blog/ege/task10",{"title":23,"path":24,"stem":25},"ЕГЭ Задание 11","/blog/ege/task11","blog/ege/task11",{"title":27,"path":28,"stem":29},"ЕГЭ Задание 12","/blog/ege/task12","blog/ege/task12",{"title":31,"path":32,"stem":33},"ЕГЭ Задание 13","/blog/ege/task13","blog/ege/task13",{"title":35,"path":36,"stem":37},"ЕГЭ Задание 14","/blog/ege/task14","blog/ege/task14",{"title":39,"path":40,"stem":41},"ЕГЭ Задание 15","/blog/ege/task15","blog/ege/task15",{"title":43,"path":44,"stem":45},"ЕГЭ Задание 16","/blog/ege/task16","blog/ege/task16",{"title":47,"path":48,"stem":49},"ЕГЭ Задание 17","/blog/ege/task17","blog/ege/task17",{"title":51,"path":52,"stem":53},"ЕГЭ Задание 18","/blog/ege/task18","blog/ege/task18",{"title":55,"path":56,"stem":57},"ЕГЭ Задание 19, 20, 21","/blog/ege/task19_20_21","blog/ege/task19_20_21",{"title":59,"path":60,"stem":61},"ЕГЭ Задание 2","/blog/ege/task2","blog/ege/task2",{"title":63,"path":64,"stem":65},"ЕГЭ Задание 22","/blog/ege/task22","blog/ege/task22",{"title":67,"path":68,"stem":69},"ЕГЭ Задание 23","/blog/ege/task23","blog/ege/task23",{"title":71,"path":72,"stem":73},"ЕГЭ Задание 24","/blog/ege/task24","blog/ege/task24",{"title":75,"path":76,"stem":77},"ЕГЭ Задание 25","/blog/ege/task25","blog/ege/task25",{"title":79,"path":80,"stem":81},"ЕГЭ Задание 26","/blog/ege/task26","blog/ege/task26",{"title":83,"path":84,"stem":85},"ЕГЭ Задание 27","/blog/ege/task27","blog/ege/task27",{"title":87,"path":88,"stem":89},"ЕГЭ Задание 3","/blog/ege/task3","blog/ege/task3",{"title":91,"path":92,"stem":93},"ЕГЭ Задание 4","/blog/ege/task4","blog/ege/task4",{"title":95,"path":96,"stem":97},"ЕГЭ Задание 5","/blog/ege/task5","blog/ege/task5",{"title":99,"path":100,"stem":101},"ЕГЭ Задание 6","/blog/ege/task6","blog/ege/task6",{"title":103,"path":104,"stem":105},"ЕГЭ Задание 7","/blog/ege/task7","blog/ege/task7",{"title":107,"path":108,"stem":109},"ЕГЭ Задание 8","/blog/ege/task8","blog/ege/task8",{"title":111,"path":112,"stem":113},"ЕГЭ Задание 9","/blog/ege/task9","blog/ege/task9",false,{"title":116,"path":117,"stem":118,"children":119,"page":114},"Oge","/blog/oge","blog/oge",[120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180],{"title":121,"path":122,"stem":123},"ОГЭ Задание 1","/blog/oge/task1","blog/oge/task1",{"title":125,"path":126,"stem":127},"ОГЭ Задание 10","/blog/oge/task10","blog/oge/task10",{"title":129,"path":130,"stem":131},"ОГЭ Задание 11","/blog/oge/task11","blog/oge/task11",{"title":133,"path":134,"stem":135},"ОГЭ Задание 12","/blog/oge/task12","blog/oge/task12",{"title":137,"path":138,"stem":139},"ОГЭ Задание 13","/blog/oge/task13","blog/oge/task13",{"title":141,"path":142,"stem":143},"ОГЭ Задание 14","/blog/oge/task14","blog/oge/task14",{"title":145,"path":146,"stem":147},"ОГЭ Задание 15","/blog/oge/task15","blog/oge/task15",{"title":149,"path":150,"stem":151},"ОГЭ Задание 16","/blog/oge/task16","blog/oge/task16",{"title":153,"path":154,"stem":155},"ОГЭ Задание 2","/blog/oge/task2","blog/oge/task2",{"title":157,"path":158,"stem":159},"ОГЭ Задание 3","/blog/oge/task3","blog/oge/task3",{"title":161,"path":162,"stem":163},"ОГЭ Задание 4","/blog/oge/task4","blog/oge/task4",{"title":165,"path":166,"stem":167},"ОГЭ Задание 5","/blog/oge/task5","blog/oge/task5",{"title":169,"path":170,"stem":171},"ОГЭ Задание 6","/blog/oge/task6","blog/oge/task6",{"title":173,"path":174,"stem":175},"ОГЭ Задание 7","/blog/oge/task7","blog/oge/task7",{"title":177,"path":178,"stem":179},"ОГЭ Задание 8","/blog/oge/task8","blog/oge/task8",{"title":181,"path":182,"stem":183},"ОГЭ Задание 9","/blog/oge/task9","blog/oge/task9",{"title":185,"path":186,"stem":187,"children":188,"page":114},"Python","/blog/python","blog/python",[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],{"title":190,"path":191,"stem":192},"Знакомство с синтаксисом","/blog/python/st1","blog/python/st1",{"title":194,"path":195,"stem":196},"Отладка","/blog/python/st10","blog/python/st10",{"title":198,"path":199,"stem":200},"Модули и пакеты","/blog/python/st11","blog/python/st11",{"title":202,"path":203,"stem":204},"Кортежи","/blog/python/st12","blog/python/st12",{"title":206,"path":207,"stem":208},"Знакомство со списками","/blog/python/st13","blog/python/st13",{"title":210,"path":211,"stem":212},"Списки и циклы","/blog/python/st14","blog/python/st14",{"title":214,"path":215,"stem":216},"Использование списков ч.1","/blog/python/st15","blog/python/st15",{"title":218,"path":219,"stem":220},"Использование списков ч.2","/blog/python/st16","blog/python/st16",{"title":222,"path":223,"stem":224},"Использование списков ч.3","/blog/python/st17","blog/python/st17",{"title":226,"path":227,"stem":228},"Словари","/blog/python/st18","blog/python/st18",{"title":230,"path":231,"stem":232},"Множества","/blog/python/st19","blog/python/st19",{"title":234,"path":235,"stem":236},"Переменные","/blog/python/st2","blog/python/st2",{"title":238,"path":239,"stem":240},"Хеш-таблицы","/blog/python/st20","blog/python/st20",{"title":242,"path":243,"stem":244},"Решето Эратосфена","/blog/python/st21","blog/python/st21",{"title":246,"path":247,"stem":248},"Длинная арифметика","/blog/python/st22","blog/python/st22",{"title":250,"path":251,"stem":252},"Декораторы функций","/blog/python/st23","blog/python/st23",{"title":254,"path":255,"stem":256},"Знакомство с алгоритмами","/blog/python/st24","blog/python/st24",{"title":258,"path":259,"stem":260},"Бинарный поиск – примеры задач","/blog/python/st25","blog/python/st25",{"title":262,"path":263,"stem":264},"Сортировка выбором","/blog/python/st26","blog/python/st26",{"title":266,"path":267,"stem":268},"Рекурсия и стек","/blog/python/st27","blog/python/st27",{"title":270,"path":271,"stem":272},"Быстрая сортировка","/blog/python/st28","blog/python/st28",{"title":274,"path":275,"stem":276},"Поиск в ширину","/blog/python/st29","blog/python/st29",{"title":278,"path":279,"stem":280},"Работа со строками","/blog/python/st3","blog/python/st3",{"title":282,"path":283,"stem":284},"Поиск в глубину","/blog/python/st30","blog/python/st30",{"title":286,"path":287,"stem":288},"Сбалансированные деревья","/blog/python/st31","blog/python/st31",{"title":290,"path":291,"stem":292},"Алгоритм Дейкстры","/blog/python/st32","blog/python/st32",{"title":294,"path":295,"stem":296},"Жадные алгоритмы","/blog/python/st33","blog/python/st33",{"title":298,"path":299,"stem":300},"Типы данных","/blog/python/st4","blog/python/st4",{"title":302,"path":303,"stem":304},"О функциях","/blog/python/st5","blog/python/st5",{"title":306,"path":307,"stem":308},"Свойства и методы","/blog/python/st6","blog/python/st6",{"title":310,"path":311,"stem":312},"Определение функций","/blog/python/st7","blog/python/st7",{"title":314,"path":315,"stem":316},"Логика","/blog/python/st8","blog/python/st8",{"title":318,"path":319,"stem":320},"Циклы","/blog/python/st9","blog/python/st9",{"title":322,"path":323,"stem":324,"children":325,"page":114},"Toi","/blog/toi","blog/toi",[326,330,334,338,342,346,350,354,358,362,366,370,374],{"title":327,"path":328,"stem":329},"Информация и информационные процессы","/blog/toi/st1","blog/toi/st1",{"title":331,"path":332,"stem":333},"Электронные таблицы","/blog/toi/st10","blog/toi/st10",{"title":335,"path":336,"stem":337},"Система, её свойства и компоненты. Моделирование","/blog/toi/st11","blog/toi/st11",{"title":339,"path":340,"stem":341},"Представление информации в компьютере","/blog/toi/st12","blog/toi/st12",{"title":343,"path":344,"stem":345},"Средства информационно-коммуникационных технологий. Файловая система","/blog/toi/st13","blog/toi/st13",{"title":347,"path":348,"stem":349},"Комбинаторика","/blog/toi/st2","blog/toi/st2",{"title":351,"path":352,"stem":353},"Адресация в интернете","/blog/toi/st3","blog/toi/st3",{"title":355,"path":356,"stem":357},"Измерение количества информации","/blog/toi/st4","blog/toi/st4",{"title":359,"path":360,"stem":361},"Системы счисления","/blog/toi/st5","blog/toi/st5",{"title":363,"path":364,"stem":365},"Диаграммы Эйлера — Венна","/blog/toi/st6","blog/toi/st6",{"title":367,"path":368,"stem":369},"Условие Фано","/blog/toi/st7","blog/toi/st7",{"title":371,"path":372,"stem":373},"Теория графов","/blog/toi/st8","blog/toi/st8",{"title":375,"path":376,"stem":377},"Алгебра логики","/blog/toi/st9","blog/toi/st9",{"id":379,"title":294,"author":380,"body":385,"date":1889,"description":1890,"extension":1891,"image":1892,"meta":1893,"minRead":1526,"navigation":1277,"num":1894,"path":295,"seo":1895,"stem":296,"__hash__":1896},"python/blog/python/st33.md",{"name":381,"avatar":382},"Штана Альберт Игоревич",{"src":383,"alt":384},"me.jpg","@ashtana",{"type":386,"value":387,"toc":1875},"minimark",[388,392,397,409,414,417,492,495,508,511,514,518,521,532,535,538,546,549,553,556,564,576,581,586,589,597,600,709,712,716,719,805,808,955,958,975,979,986,1034,1041,1115,1119,1122,1134,1137,1145,1150,1154,1177,1186,1192,1207,1217,1591,1594,1839,1842,1847,1849,1853,1865,1868,1872],[389,390,294],"h2",{"id":391},"жадные-алгоритмы",[393,394],"card-collapsible",{":isList":395,"title":396},"[\"Узнаете о жадной стратегии при решении задач.\",\"Разберётесь как браться за невозможные задачи, не имеющие быстрого алгоритмического решения NP-трудные задачи.\",\"Познакомитесь с приближёнными алгоритмами, которые могут использоваться для быстрого нахождения приближённого решения NP-полных задач.\"]","Из этой статьи вы",[398,399,400],"blockquote",{},[401,402,403,404,408],"p",{},"В предыдущей статье был рассмотрен: ",[405,406,407],"a",{"href":291},"алгоритм Дейкстры",".\nЗдесь далее текст пойдёт о жадных алгоритмах.",[410,411,413],"h3",{"id":412},"задача-составления-расписания","Задача составления расписания",[401,415,416],{},"Предположим, имеется учебный класс, в котором нужно провести как можно больше уроков. У вас есть список уроков:",[418,419,420,436],"table",{},[421,422,423],"thead",{},[424,425,426,430,433],"tr",{},[427,428,429],"th",{},"Предмет",[427,431,432],{},"С",[427,434,435],{},"ДО",[437,438,439,451,462,472,482],"tbody",{},[424,440,441,445,448],{},[442,443,444],"td",{},"ИЗО",[442,446,447],{},"8:00",[442,449,450],{},"9:00",[424,452,453,456,459],{},[442,454,455],{},"English",[442,457,458],{},"8:30",[442,460,461],{},"9:30",[424,463,464,467,469],{},[442,465,466],{},"Алгебра",[442,468,450],{},[442,470,471],{},"10:00",[424,473,474,477,479],{},[442,475,476],{},"Информатика",[442,478,461],{},[442,480,481],{},"10:30",[424,483,484,487,489],{},[442,485,486],{},"Физика",[442,488,471],{},[442,490,491],{},"11:00",[401,493,494],{},"Провести все уроки не получится, потому что они перекрывают друг друга по времени.\nТребуется провести в классе как можно больше уроков.\nКак отобрать уроки, чтобы полученный набор оказался самым большим из возможных?\nВот какой составить необходимо алгоритм:",[496,497,498,502,505],"ol",{},[499,500,501],"li",{},"Выбрать урок, завершающийся раньше всех. Это первый урок, который будет проведён в классе.",[499,503,504],{},"Затем выбирается урок, начинающийся после завершения первого урока. И снова следует выбирать урок, который завершается раньше всех остальных. Он становится вторым уроком в расписании класса.",[499,506,507],{},"Продолжайте действовать по тому же принципу, чтобы получить ответ.",[401,509,510],{},"Попробуйте алгоритм на примере таблицы выше. ИЗО заканчивается раньше всех уроков, поэтому выбираем первым уроком.\nДалее нужно найти и выбрать следующий урок, который начинается после 9:00 и завершается раньше остальных.\nАнглийский отпадает, но алгебра подходит. Наконец, информатика пересекается по времени с алгеброй, но физика подходит.\nИтак, задача решена, эти три урока должны проводится в классе: ИЗО, алгебра, физика.",[401,512,513],{},"Можно подумать что этот алгоритм удивительно прост. Он слишком очевиден, но в этом и заключается суть жадных алгоритмов!\nОни просты! Жадный алгоритм: на каждом своём шаге выбирает всегда оптимальный вариант.\nВ техническом плане выбирается всегда локально-оптимальное решение.\nКонечно такие алгоритмы сработают не всегда, но с задачей из примера или подобной они справляются легко и интуитивно понятно реализуются!\nРассмотрим далее другой пример.",[410,515,517],{"id":516},"задача-о-рюкзаке","Задача о рюкзаке",[401,519,520],{},"Представьте, что вы богатый покупатель или транжира денежных средств.\nВы зашли в магазин или супермаркет с рюкзаком и перед вами множество товаров, которые вы обязательно хотите немедленно купить.\nОднако, ёмкость вашего рюкзака и ваша грузоподъёмность не бесконечна: примерно рюкзак и соответственно вы сможете понести, допустим, 50 кг(как мешок с цементом)!\nВы также хотите купить максимально дорогие вещи!\nМожно легко представить и противоположную ситуацию — у вас абсолютно нет денег и вы хотите всё украсть и также унести 😁.\nНо задача одна и состоит в том, чтобы подобрать товары максимальной стоимости, которые вы смогли бы унести в своём рюкзаке.\nКакой алгоритм использовать?\nПопробуйте жадный алгоритм:",[496,522,523,526,529],{},[499,524,525],{},"Выбрать самый дорогой предмет, который поместиться в рюкзаке.",[499,527,528],{},"Выбрать следующий по стоимости предмет, который поместится в рюкзаке.",[499,530,531],{},"И так далее продолжить до заполнения всего места в рюкзаке.",[401,533,534],{},"Вот только, как можно было догадаться, на этот раз такая стратегия не приводит к лучшему решению и соответственно она не работает!\nДопустим вы выбираете самый дорогой товар, например, это музыкальный центр. Вы складываете его в рюкзак и место больше ни для чего не остаётся.\nПусть он стоил 1000000 рублей и это был самый дорогой товар в магазине.\nНо допустим, были также ещё и два товара, стоимостью 750000 и 500000 рублей, которые вдвоём поместились бы в ваш рюкзак.\nНо согласно алгоритму описанному выше вы бы их уже не купили.",[401,536,537],{},"Очевидно, жадный алгоритм не всегда выдаёт оптимальное решение всей задачи.\nВпрочем, зачастую результат, даже ошибочный, будет не так уж далёк от истинного ответа.\nИ в некоторых задачах достаточно жадного алгоритма, способного решить задачу достаточно хорошо.\nВ таких областях жадные алгоритмы работают отлично, потому что они просто реализуются, а полученное решение обычно близко к оптимуму.",[539,540],"card-collapsible-num-answers",{":isAnswers":541,":isList":542,":startOl":543,"isText":544,"title":545},"[\"Выбираем достопримечательности с наибольшей стоимостью в баллах, которую вы успеете посетить в оставшееся время. Остановитесь, когда таких достопримечательностей не останется. Такая стратегия не будет оптимальной.\",\"Жадная стратегия заключается в том, чтобы выбрать самую большую коробку, помещающуюся в оставшемся пространстве, и повторять это до тех пор, пока ещё можно выбрать хотя бы одну коробку. Такое решение не будет оптимальным.\"]","[\"Вы едите заграницу и у вас есть семь дней на знакомство с достопримечательности. Вы присваиваете каждой достопримечательности стоимость в баллах(насколько вы хотите её увидеть) и оцениваете продолжительность посещения. Как увидеть всё самое важное из всей поездки? Предложите жадную стратегию решения данной задачи. Будет ли решение оптимальным?\",\"Вы работаете в фирме по производству мебели и поставляете её. Коробки с мебелью размещаются в грузовике. Все коробки имеют разный размер, и вы стараетесь наиболее эффективно использовать доступное пространство в коробках. Как выбрать коробки для того, чтобы загрузка имела максимальную эффективность? Предложите жадную стратегию для решения данной задачи. Будет ли полученное решение оптимальным?\"]","1","Попробуйте ответить на следующие вопросы","УПРАЖНЕНИЯ",[401,547,548],{},"Рассмотрим ещё пример, в котором без жадных алгоритмов трудно обойтись.",[410,550,552],{"id":551},"задача-о-покрытии-множества","Задача о покрытии множества",[401,554,555],{},"Вы открываете собственную авторскую программу по радио.\nНужно только решить на каких радиостанциях должна транслироваться ваша программа.\nКаждая трансляция на радио стоит денег, поэтому количество станций нужно свести к минимуму с максимальным качеством вещаний.\nИмеется список станций.\nКаждая станция покрывает определённый набор областей для вещания, эти наборы перекрываются по областям.\nКак найти минимальный набор станций, который покрывал бы все 89 субъектов и областей?\nЗадача довольно сложна. Составим алгоритм:",[496,557,558,561],{},[499,559,560],{},"Составить список всех возможных подмножеств станций – так называемое степенное множество. В нём содержатся 2^n возможных подмножеств.",[499,562,563],{},"Из этого списка выбирается множество с наименьшим набором станций, покрывающих все 89 субъектов.",[401,565,566,567,571,572,575],{},"Проблема решения данной задачи состоит в том, что вычисление всех возможных подмножеств станций займёт слишком много времени.\nДля ",[568,569,570],"em",{},"n"," станций оно потребует времени ",[568,573,574],{},"O(2^n)."," Если станций немного, скажем от 5 до 10, — это допустимо.\nНо подумайте, что произойдёт во всех рассмотренных примерах при большом количестве элементов.\nПредположим, вы можете вычислять по 10 подмножеств в секунду.",[401,577,578],{},[568,579,580],{},"Не существует алгоритма, который будет вычислять подмножества с приемлемой скоростью! Что делать? На помощь приходят жадные алгоритмы.",[582,583,585],"h4",{"id":584},"приближённые-алгоритмы-реализация","Приближённые алгоритмы: реализация",[401,587,588],{},"Вот как выглядит жадный алгоритм, который выдаёт результат, достаточно близкий к оптимальному решению:",[496,590,591,594],{},[499,592,593],{},"Выбрать станцию, покрывающую наибольшее количество областей, ещё не входящих в покрытие. Если станция будет покрывать некоторые области, уже входящие в покрытие, это нормально.",[499,595,596],{},"Повторять, пока останутся области, не входящие в покрытие.",[401,598,599],{},"Этот алгоритм является приближённым. Когда вычисление точного решения занимает слишком много времени, применяется приближённый алгоритм.\nЭффективность приближённого алгоритма оценивается по: быстроте, близости полученного решения к оптимальному.",[401,601,602,603,705,706,708],{},"Жадные алгоритмы хороши не только тем, что они обычно легко формулируются, но и тем, что простота обычно оборачивается скоростью выполнения.\nВ данном случае жадный алгоритм выполняется за время ",[604,605,609],"mjx-container",{"className":606,"jax":608},[607],"MathJax","SVG",[610,611,620,648],"svg",{"style":612,"xmlns":613,"width":614,"height":615,"role":616,"focusable":617,"viewBox":618,"xmlnsXLink":619},"vertical-align: -0.566ex;","http://www.w3.org/2000/svg","6.461ex","2.452ex","img","false","0 -833.9 2855.6 1083.9","http://www.w3.org/1999/xlink",[621,622,623,628,632,636,640,644],"defs",{},[624,625],"path",{"id":626,"d":627},"MJX-1-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",[624,629],{"id":630,"d":631},"MJX-1-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",[624,633],{"id":634,"d":635},"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",[624,637],{"id":638,"d":639},"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",[624,641],{"id":642,"d":643},"MJX-1-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",[624,645],{"id":646,"d":647},"MJX-1-TEX-N-2C","M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z",[649,650,654],"g",{"stroke":651,"fill":651,"stroke-width":652,"transform":653},"currentColor","0","scale(1,-1)",[649,655,657,665,673,691,698],{"dataMmlNode":656},"math",[649,658,660],{"dataMmlNode":659},"mi",[661,662],"use",{"dataC":663,"xLinkHref":664},"1D442","#MJX-1-TEX-I-1D442",[649,666,669],{"dataMmlNode":667,"transform":668},"mo","translate(763,0)",[661,670],{"dataC":671,"xLinkHref":672},"28","#MJX-1-TEX-N-28",[649,674,677,683],{"dataMmlNode":675,"transform":676},"msup","translate(1152,0)",[649,678,679],{"dataMmlNode":659},[661,680],{"dataC":681,"xLinkHref":682},"1D45B","#MJX-1-TEX-I-1D45B",[649,684,687],{"dataMmlNode":685,"transform":686},"mn","translate(633,363) scale(0.707)",[661,688],{"dataC":689,"xLinkHref":690},"32","#MJX-1-TEX-N-32",[649,692,694],{"dataMmlNode":667,"transform":693},"translate(2188.6,0)",[661,695],{"dataC":696,"xLinkHref":697},"29","#MJX-1-TEX-N-29",[649,699,701],{"dataMmlNode":667,"transform":700},"translate(2577.6,0)",[661,702],{"dataC":703,"xLinkHref":704},"2C","#MJX-1-TEX-N-2C"," где ",[568,707,570],{}," – количество радиостанций.",[401,710,711],{},"Теперь разберёмся как задача будет выглядеть в программном коде на Python.",[582,713,715],{"id":714},"подготовительный-код","Подготовительный код",[401,717,718],{},"В этом примере для простоты будет использоваться небольшое подмножество областей и станций.\nСначала составим список областей:",[720,721,726],"pre",{"className":722,"code":723,"language":724,"meta":725,"style":725},"language-python shiki shiki-themes github-light","# Для обозначения субъектов РФ используются коды\n# Переданный массив преобразуется в множество\nstates_needed = set([\"28\", \"29\", \"30\", \"31\", \"32\", \"33\", \"34\", \"35\"])  \n","python","",[727,728,729,738,744],"code",{"__ignoreMap":725},[730,731,734],"span",{"class":732,"line":733},"line",1,[730,735,737],{"class":736},"sAwPA","# Для обозначения субъектов РФ используются коды\n",[730,739,741],{"class":732,"line":740},2,[730,742,743],{"class":736},"# Переданный массив преобразуется в множество\n",[730,745,747,751,755,759,762,766,769,772,774,777,779,782,784,787,789,792,794,797,799,802],{"class":732,"line":746},3,[730,748,750],{"class":749},"sgsFI","states_needed ",[730,752,754],{"class":753},"sD7c4","=",[730,756,758],{"class":757},"sYu0t"," set",[730,760,761],{"class":749},"([",[730,763,765],{"class":764},"sYBdl","\"28\"",[730,767,768],{"class":749},", ",[730,770,771],{"class":764},"\"29\"",[730,773,768],{"class":749},[730,775,776],{"class":764},"\"30\"",[730,778,768],{"class":749},[730,780,781],{"class":764},"\"31\"",[730,783,768],{"class":749},[730,785,786],{"class":764},"\"32\"",[730,788,768],{"class":749},[730,790,791],{"class":764},"\"33\"",[730,793,768],{"class":749},[730,795,796],{"class":764},"\"34\"",[730,798,768],{"class":749},[730,800,801],{"class":764},"\"35\"",[730,803,804],{"class":749},"])\n",[401,806,807],{},"В этой реализации используем множество.\nЭта структура данных похожа на список, но каждый элемент может встречаться во множестве не более одного раза.\nМножества не содержат дубликатов. Также понадобится список станций, из которого будет выбираться покрытие.\nВоспользуемся словарём:",[720,809,811],{"className":722,"code":810,"language":724,"meta":725,"style":725},"stations = {}\nstations[\"one\"] = set([\"31\", \"32\", \"33\"])\nstations[\"two\"] = set([\"29\", \"31\", \"28\"])\nstations[\"three\"] = set([\"30\", \"32\", \"34\"])\nstations[\"four\"] = set([\"32\", \"33\"])\nstations[\"five\"] = set([\"34\", \"35\"])\n",[727,812,813,823,852,879,907,931],{"__ignoreMap":725},[730,814,815,818,820],{"class":732,"line":733},[730,816,817],{"class":749},"stations ",[730,819,754],{"class":753},[730,821,822],{"class":749}," {}\n",[730,824,825,828,831,834,836,838,840,842,844,846,848,850],{"class":732,"line":740},[730,826,827],{"class":749},"stations[",[730,829,830],{"class":764},"\"one\"",[730,832,833],{"class":749},"] ",[730,835,754],{"class":753},[730,837,758],{"class":757},[730,839,761],{"class":749},[730,841,781],{"class":764},[730,843,768],{"class":749},[730,845,786],{"class":764},[730,847,768],{"class":749},[730,849,791],{"class":764},[730,851,804],{"class":749},[730,853,854,856,859,861,863,865,867,869,871,873,875,877],{"class":732,"line":746},[730,855,827],{"class":749},[730,857,858],{"class":764},"\"two\"",[730,860,833],{"class":749},[730,862,754],{"class":753},[730,864,758],{"class":757},[730,866,761],{"class":749},[730,868,771],{"class":764},[730,870,768],{"class":749},[730,872,781],{"class":764},[730,874,768],{"class":749},[730,876,765],{"class":764},[730,878,804],{"class":749},[730,880,882,884,887,889,891,893,895,897,899,901,903,905],{"class":732,"line":881},4,[730,883,827],{"class":749},[730,885,886],{"class":764},"\"three\"",[730,888,833],{"class":749},[730,890,754],{"class":753},[730,892,758],{"class":757},[730,894,761],{"class":749},[730,896,776],{"class":764},[730,898,768],{"class":749},[730,900,786],{"class":764},[730,902,768],{"class":749},[730,904,796],{"class":764},[730,906,804],{"class":749},[730,908,910,912,915,917,919,921,923,925,927,929],{"class":732,"line":909},5,[730,911,827],{"class":749},[730,913,914],{"class":764},"\"four\"",[730,916,833],{"class":749},[730,918,754],{"class":753},[730,920,758],{"class":757},[730,922,761],{"class":749},[730,924,786],{"class":764},[730,926,768],{"class":749},[730,928,791],{"class":764},[730,930,804],{"class":749},[730,932,934,936,939,941,943,945,947,949,951,953],{"class":732,"line":933},6,[730,935,827],{"class":749},[730,937,938],{"class":764},"\"five\"",[730,940,833],{"class":749},[730,942,754],{"class":753},[730,944,758],{"class":757},[730,946,761],{"class":749},[730,948,796],{"class":764},[730,950,768],{"class":749},[730,952,801],{"class":764},[730,954,804],{"class":749},[401,956,957],{},"Ключи — названия станций, а значения — сокращенные обозначения областей, входящих в зону охвата.\nТаким образом, в данном примере станция one вещает в субъектах с кодами 31, 32, 33(Белгородская, Брянская и Владимирская области).\nВсе значения являются множествами. Хранение данных во множествах упрощает работу.\nНаконец, нам понадобится структура данных для хранения итогового набора станций:",[720,959,961],{"className":722,"code":960,"language":724,"meta":725,"style":725},"final_stations = set()\n",[727,962,963],{"__ignoreMap":725},[730,964,965,968,970,972],{"class":732,"line":733},[730,966,967],{"class":749},"final_stations ",[730,969,754],{"class":753},[730,971,758],{"class":757},[730,973,974],{"class":749},"()\n",[582,976,978],{"id":977},"вычисление-ответа","Вычисление ответа",[401,980,981,982,985],{},"Теперь необходимо вычислить набор используемых станций. Правильных решений может быть несколько.\nНеобходимо перебрать все станции и выбрать ту, которая обслуживает больше всего субъектов-областей, не входящих в текущее покрытие.\nБудем называть её ",[727,983,984],{},"best_station",":",[720,987,989],{"className":722,"code":988,"language":724,"meta":725,"style":725},"while states_needed:\n  best_station = None\n  states_covered = set()\n  for station, states_for_station in stations.items():\n",[727,990,991,999,1009,1020],{"__ignoreMap":725},[730,992,993,996],{"class":732,"line":733},[730,994,995],{"class":753},"while",[730,997,998],{"class":749}," states_needed:\n",[730,1000,1001,1004,1006],{"class":732,"line":740},[730,1002,1003],{"class":749},"  best_station ",[730,1005,754],{"class":753},[730,1007,1008],{"class":757}," None\n",[730,1010,1011,1014,1016,1018],{"class":732,"line":746},[730,1012,1013],{"class":749},"  states_covered ",[730,1015,754],{"class":753},[730,1017,758],{"class":757},[730,1019,974],{"class":749},[730,1021,1022,1025,1028,1031],{"class":732,"line":881},[730,1023,1024],{"class":753},"  for",[730,1026,1027],{"class":749}," station, states_for_station ",[730,1029,1030],{"class":753},"in",[730,1032,1033],{"class":749}," stations.items():\n",[401,1035,1036,1037,1040],{},"Множество ",[727,1038,1039],{},"states_covered содержит"," все области, обслуживаемые этой станцией, которые ещё не входят в текущее покрытие.\nПомните, мы ищем станцию, которая будет обслуживать большинство ещё не охваченных областей.\nЦикл for перебирает все станции и находит среди них наилучшую.\nРассмотрим тело цикла for:",[720,1042,1044],{"className":722,"code":1043,"language":724,"meta":725,"style":725},"for station, states_for_station in stations.items():\n  covered = states_needed & states_for_station # Пересечение множеств\n  if len(covered) > len(states_covered):\n    best_station = station\n    states_covered = covered\n",[727,1045,1046,1057,1076,1095,1105],{"__ignoreMap":725},[730,1047,1048,1051,1053,1055],{"class":732,"line":733},[730,1049,1050],{"class":753},"for",[730,1052,1027],{"class":749},[730,1054,1030],{"class":753},[730,1056,1033],{"class":749},[730,1058,1059,1062,1064,1067,1070,1073],{"class":732,"line":740},[730,1060,1061],{"class":749},"  covered ",[730,1063,754],{"class":753},[730,1065,1066],{"class":749}," states_needed ",[730,1068,1069],{"class":753},"&",[730,1071,1072],{"class":749}," states_for_station ",[730,1074,1075],{"class":736},"# Пересечение множеств\n",[730,1077,1078,1081,1084,1087,1090,1092],{"class":732,"line":746},[730,1079,1080],{"class":753},"  if",[730,1082,1083],{"class":757}," len",[730,1085,1086],{"class":749},"(covered) ",[730,1088,1089],{"class":753},">",[730,1091,1083],{"class":757},[730,1093,1094],{"class":749},"(states_covered):\n",[730,1096,1097,1100,1102],{"class":732,"line":881},[730,1098,1099],{"class":749},"    best_station ",[730,1101,754],{"class":753},[730,1103,1104],{"class":749}," station\n",[730,1106,1107,1110,1112],{"class":732,"line":909},[730,1108,1109],{"class":749},"    states_covered ",[730,1111,754],{"class":753},[730,1113,1114],{"class":749}," covered\n",[582,1116,1118],{"id":1117},"про-множества","Про множества",[401,1120,1121],{},"С двумя множествами можно выполнить ряд операций:",[1123,1124,1125,1128,1131],"ul",{},[499,1126,1127],{},"объединение множеств означает слияние элементов обоих множеств;",[499,1129,1130],{},"под операцией пересечения множеств понимается поиск элементов, входящих в оба множества;",[499,1132,1133],{},"под разностью множеств понимается исключение из одного множества элементов, присутствующих в другом множестве.",[401,1135,1136],{},"Основные особенности множеств:",[1123,1138,1139,1142],{},[499,1140,1141],{},"множества похожи на списки, но не содержат дубликатов;",[499,1143,1144],{},"с множествами можно выполнять различные операции — объединение пересечение и разность.",[401,1146,1147],{},[405,1148,1149],{"href":231},"Подробнее про множества",[582,1151,1153],{"id":1152},"допишем-код","Допишем код",[401,1155,1036,1156,1159,1160,1163,1164,1167,1168,1170,1171,1173,1174,1176],{},[727,1157,1158],{},"covered"," содержит области, присутствующие как ",[727,1161,1162],{},"states_needed",", так и в ",[727,1165,1166],{},"states_for_station",".\nТаким образом, ",[727,1169,1158],{}," — множество областей, не входящих в покрытие, которые покрываются текущей станцией!\nЗатем мы проверяем, покрывает ли эта станция больше областей, чем текущая станция ",[727,1172,984],{},".\nЕсли условие выполняется, то станция сохраняется в ",[727,1175,984],{},".\nНаконец, после завершения цикла best_station добавляется в итоговый список станции:",[720,1178,1180],{"className":722,"code":1179,"language":724,"meta":725,"style":725},"final_station.add(best_station)\n",[727,1181,1182],{"__ignoreMap":725},[730,1183,1184],{"class":732,"line":733},[730,1185,1179],{"class":749},[401,1187,1188,1189,1191],{},"Также необходимо обновить содержимое ",[727,1190,1162],{},".\nТе области(субъекты), которые входят в зону покрытия станций, больше не нужны:",[720,1193,1195],{"className":722,"code":1194,"language":724,"meta":725,"style":725},"states_needed -= states_covered\n",[727,1196,1197],{"__ignoreMap":725},[730,1198,1199,1201,1204],{"class":732,"line":733},[730,1200,750],{"class":749},[730,1202,1203],{"class":753},"-=",[730,1205,1206],{"class":749}," states_covered\n",[401,1208,1209,1210,1212,1213,1216],{},"Цикл продолжается, пока множество ",[727,1211,1162],{}," не станет пустым. В конце остаюётся только вывести ",[727,1214,1215],{},"final_stations",".\nПолный код выглядит так:",[720,1218,1220],{"className":722,"code":1219,"language":724,"meta":725,"style":725},"# Для обозначения субъектов РФ используются коды\n# Переданный массив преобразуется в множество\nstates_needed = set([\"28\", \"29\", \"30\", \"31\", \"32\", \"33\", \"34\", \"35\"]) \n\nstations = {}\nstations[\"one\"] = set([\"31\", \"32\", \"33\"])\nstations[\"two\"] = set([\"29\", \"31\", \"28\"])\nstations[\"three\"] = set([\"30\", \"32\", \"34\"])\nstations[\"four\"] = set([\"32\", \"33\"])\nstations[\"five\"] = set([\"34\", \"35\"])\n\nfinal_stations = set()\nwhile states_needed:\n  best_station = None\n  states_covered = set()\n  for station, states_for_station in stations.items():\n    covered = states_needed & states_for_station\n    if len(covered) > len(states_covered) and station not in final_stations:\n      best_station = station\n      states_covered = covered\n  if best_station is not None:\n    states_needed -= states_covered\n    final_stations.add(best_station)\n    stations.pop(best_station)\n    \nprint(final_stations)\n",[727,1221,1222,1226,1230,1273,1279,1287,1313,1340,1367,1390,1413,1418,1429,1436,1445,1456,1467,1482,1514,1524,1534,1554,1564,1570,1576,1582],{"__ignoreMap":725},[730,1223,1224],{"class":732,"line":733},[730,1225,737],{"class":736},[730,1227,1228],{"class":732,"line":740},[730,1229,743],{"class":736},[730,1231,1232,1234,1236,1238,1240,1242,1244,1246,1248,1250,1252,1254,1256,1258,1260,1262,1264,1266,1268,1270],{"class":732,"line":746},[730,1233,750],{"class":749},[730,1235,754],{"class":753},[730,1237,758],{"class":757},[730,1239,761],{"class":749},[730,1241,765],{"class":764},[730,1243,768],{"class":749},[730,1245,771],{"class":764},[730,1247,768],{"class":749},[730,1249,776],{"class":764},[730,1251,768],{"class":749},[730,1253,781],{"class":764},[730,1255,768],{"class":749},[730,1257,786],{"class":764},[730,1259,768],{"class":749},[730,1261,791],{"class":764},[730,1263,768],{"class":749},[730,1265,796],{"class":764},[730,1267,768],{"class":749},[730,1269,801],{"class":764},[730,1271,1272],{"class":749},"]) \n",[730,1274,1275],{"class":732,"line":881},[730,1276,1278],{"emptyLinePlaceholder":1277},true,"\n",[730,1280,1281,1283,1285],{"class":732,"line":909},[730,1282,817],{"class":749},[730,1284,754],{"class":753},[730,1286,822],{"class":749},[730,1288,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311],{"class":732,"line":933},[730,1290,827],{"class":749},[730,1292,830],{"class":764},[730,1294,833],{"class":749},[730,1296,754],{"class":753},[730,1298,758],{"class":757},[730,1300,761],{"class":749},[730,1302,781],{"class":764},[730,1304,768],{"class":749},[730,1306,786],{"class":764},[730,1308,768],{"class":749},[730,1310,791],{"class":764},[730,1312,804],{"class":749},[730,1314,1316,1318,1320,1322,1324,1326,1328,1330,1332,1334,1336,1338],{"class":732,"line":1315},7,[730,1317,827],{"class":749},[730,1319,858],{"class":764},[730,1321,833],{"class":749},[730,1323,754],{"class":753},[730,1325,758],{"class":757},[730,1327,761],{"class":749},[730,1329,771],{"class":764},[730,1331,768],{"class":749},[730,1333,781],{"class":764},[730,1335,768],{"class":749},[730,1337,765],{"class":764},[730,1339,804],{"class":749},[730,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365],{"class":732,"line":1342},8,[730,1344,827],{"class":749},[730,1346,886],{"class":764},[730,1348,833],{"class":749},[730,1350,754],{"class":753},[730,1352,758],{"class":757},[730,1354,761],{"class":749},[730,1356,776],{"class":764},[730,1358,768],{"class":749},[730,1360,786],{"class":764},[730,1362,768],{"class":749},[730,1364,796],{"class":764},[730,1366,804],{"class":749},[730,1368,1370,1372,1374,1376,1378,1380,1382,1384,1386,1388],{"class":732,"line":1369},9,[730,1371,827],{"class":749},[730,1373,914],{"class":764},[730,1375,833],{"class":749},[730,1377,754],{"class":753},[730,1379,758],{"class":757},[730,1381,761],{"class":749},[730,1383,786],{"class":764},[730,1385,768],{"class":749},[730,1387,791],{"class":764},[730,1389,804],{"class":749},[730,1391,1393,1395,1397,1399,1401,1403,1405,1407,1409,1411],{"class":732,"line":1392},10,[730,1394,827],{"class":749},[730,1396,938],{"class":764},[730,1398,833],{"class":749},[730,1400,754],{"class":753},[730,1402,758],{"class":757},[730,1404,761],{"class":749},[730,1406,796],{"class":764},[730,1408,768],{"class":749},[730,1410,801],{"class":764},[730,1412,804],{"class":749},[730,1414,1416],{"class":732,"line":1415},11,[730,1417,1278],{"emptyLinePlaceholder":1277},[730,1419,1421,1423,1425,1427],{"class":732,"line":1420},12,[730,1422,967],{"class":749},[730,1424,754],{"class":753},[730,1426,758],{"class":757},[730,1428,974],{"class":749},[730,1430,1432,1434],{"class":732,"line":1431},13,[730,1433,995],{"class":753},[730,1435,998],{"class":749},[730,1437,1439,1441,1443],{"class":732,"line":1438},14,[730,1440,1003],{"class":749},[730,1442,754],{"class":753},[730,1444,1008],{"class":757},[730,1446,1448,1450,1452,1454],{"class":732,"line":1447},15,[730,1449,1013],{"class":749},[730,1451,754],{"class":753},[730,1453,758],{"class":757},[730,1455,974],{"class":749},[730,1457,1459,1461,1463,1465],{"class":732,"line":1458},16,[730,1460,1024],{"class":753},[730,1462,1027],{"class":749},[730,1464,1030],{"class":753},[730,1466,1033],{"class":749},[730,1468,1470,1473,1475,1477,1479],{"class":732,"line":1469},17,[730,1471,1472],{"class":749},"    covered ",[730,1474,754],{"class":753},[730,1476,1066],{"class":749},[730,1478,1069],{"class":753},[730,1480,1481],{"class":749}," states_for_station\n",[730,1483,1485,1488,1490,1492,1494,1496,1499,1502,1505,1508,1511],{"class":732,"line":1484},18,[730,1486,1487],{"class":753},"    if",[730,1489,1083],{"class":757},[730,1491,1086],{"class":749},[730,1493,1089],{"class":753},[730,1495,1083],{"class":757},[730,1497,1498],{"class":749},"(states_covered) ",[730,1500,1501],{"class":753},"and",[730,1503,1504],{"class":749}," station ",[730,1506,1507],{"class":753},"not",[730,1509,1510],{"class":753}," in",[730,1512,1513],{"class":749}," final_stations:\n",[730,1515,1517,1520,1522],{"class":732,"line":1516},19,[730,1518,1519],{"class":749},"      best_station ",[730,1521,754],{"class":753},[730,1523,1104],{"class":749},[730,1525,1527,1530,1532],{"class":732,"line":1526},20,[730,1528,1529],{"class":749},"      states_covered ",[730,1531,754],{"class":753},[730,1533,1114],{"class":749},[730,1535,1537,1539,1542,1545,1548,1551],{"class":732,"line":1536},21,[730,1538,1080],{"class":753},[730,1540,1541],{"class":749}," best_station ",[730,1543,1544],{"class":753},"is",[730,1546,1547],{"class":753}," not",[730,1549,1550],{"class":757}," None",[730,1552,1553],{"class":749},":\n",[730,1555,1557,1560,1562],{"class":732,"line":1556},22,[730,1558,1559],{"class":749},"    states_needed ",[730,1561,1203],{"class":753},[730,1563,1206],{"class":749},[730,1565,1567],{"class":732,"line":1566},23,[730,1568,1569],{"class":749},"    final_stations.add(best_station)\n",[730,1571,1573],{"class":732,"line":1572},24,[730,1574,1575],{"class":749},"    stations.pop(best_station)\n",[730,1577,1579],{"class":732,"line":1578},25,[730,1580,1581],{"class":749},"    \n",[730,1583,1585,1588],{"class":732,"line":1584},26,[730,1586,1587],{"class":757},"print",[730,1589,1590],{"class":749},"(final_stations)\n",[401,1592,1593],{},"Вместо станций 1,2,3,5 можно было выбрать станции 2,3,4, и 5.\nНиже сравним время выполнения алгоритма:",[418,1595,1596,1722],{},[421,1597,1598],{},[424,1599,1600,1603,1664],{},[427,1601,1602],{},"Кол-во станций",[427,1604,1605,1606],{},"Точный алгоритм ",[604,1607,1609],{"className":1608,"jax":608},[607],[610,1610,1614,1631],{"style":612,"xmlns":613,"width":1611,"height":1612,"role":616,"focusable":617,"viewBox":1613,"xmlnsXLink":619},"5.765ex","2.262ex","0 -750 2548.3 1000",[621,1615,1616,1619,1622,1625,1628],{},[624,1617],{"id":1618,"d":627},"MJX-2-TEX-I-1D442",[624,1620],{"id":1621,"d":631},"MJX-2-TEX-N-28",[624,1623],{"id":1624,"d":639},"MJX-2-TEX-N-32",[624,1626],{"id":1627,"d":635},"MJX-2-TEX-I-1D45B",[624,1629],{"id":1630,"d":643},"MJX-2-TEX-N-29",[649,1632,1633],{"stroke":651,"fill":651,"stroke-width":652,"transform":653},[649,1634,1635,1640,1645,1658],{"dataMmlNode":656},[649,1636,1637],{"dataMmlNode":659},[661,1638],{"dataC":663,"xLinkHref":1639},"#MJX-2-TEX-I-1D442",[649,1641,1642],{"dataMmlNode":667,"transform":668},[661,1643],{"dataC":671,"xLinkHref":1644},"#MJX-2-TEX-N-28",[649,1646,1647,1652],{"dataMmlNode":675,"transform":676},[649,1648,1649],{"dataMmlNode":685},[661,1650],{"dataC":689,"xLinkHref":1651},"#MJX-2-TEX-N-32",[649,1653,1655],{"dataMmlNode":659,"transform":1654},"translate(533,363) scale(0.707)",[661,1656],{"dataC":681,"xLinkHref":1657},"#MJX-2-TEX-I-1D45B",[649,1659,1661],{"dataMmlNode":667,"transform":1660},"translate(2159.3,0)",[661,1662],{"dataC":696,"xLinkHref":1663},"#MJX-2-TEX-N-29",[427,1665,1666,1667],{},"Жадный алгоритм ",[604,1668,1670],{"className":1669,"jax":608},[607],[610,1671,1674,1691],{"style":612,"xmlns":613,"width":1672,"height":615,"role":616,"focusable":617,"viewBox":1673,"xmlnsXLink":619},"5.832ex","0 -833.9 2577.6 1083.9",[621,1675,1676,1679,1682,1685,1688],{},[624,1677],{"id":1678,"d":627},"MJX-3-TEX-I-1D442",[624,1680],{"id":1681,"d":631},"MJX-3-TEX-N-28",[624,1683],{"id":1684,"d":635},"MJX-3-TEX-I-1D45B",[624,1686],{"id":1687,"d":639},"MJX-3-TEX-N-32",[624,1689],{"id":1690,"d":643},"MJX-3-TEX-N-29",[649,1692,1693],{"stroke":651,"fill":651,"stroke-width":652,"transform":653},[649,1694,1695,1700,1705,1717],{"dataMmlNode":656},[649,1696,1697],{"dataMmlNode":659},[661,1698],{"dataC":663,"xLinkHref":1699},"#MJX-3-TEX-I-1D442",[649,1701,1702],{"dataMmlNode":667,"transform":668},[661,1703],{"dataC":671,"xLinkHref":1704},"#MJX-3-TEX-N-28",[649,1706,1707,1712],{"dataMmlNode":675,"transform":676},[649,1708,1709],{"dataMmlNode":659},[661,1710],{"dataC":681,"xLinkHref":1711},"#MJX-3-TEX-I-1D45B",[649,1713,1714],{"dataMmlNode":685,"transform":686},[661,1715],{"dataC":689,"xLinkHref":1716},"#MJX-3-TEX-N-32",[649,1718,1719],{"dataMmlNode":667,"transform":693},[661,1720],{"dataC":696,"xLinkHref":1721},"#MJX-3-TEX-N-29",[437,1723,1724,1735,1746,1755],{},[424,1725,1726,1729,1732],{},[442,1727,1728],{},"5",[442,1730,1731],{},"3.3 сек",[442,1733,1734],{},"2.5 сек",[424,1736,1737,1740,1743],{},[442,1738,1739],{},"10",[442,1741,1742],{},"102.5 сек",[442,1744,1745],{},"10 сек",[424,1747,1748,1750,1753],{},[442,1749,689],{},[442,1751,1752],{},"13.6 лет",[442,1754,1742],{},[424,1756,1757,1760,1836],{},[442,1758,1759],{},"100",[442,1761,1762,1835],{},[604,1763,1765],{"className":1764,"jax":608},[607],[610,1766,1771,1792],{"style":1767,"xmlns":613,"width":1768,"height":1769,"role":616,"focusable":617,"viewBox":1770,"xmlnsXLink":619},"vertical-align: -0.05ex;","7.318ex","2.005ex","0 -864 3234.6 886",[621,1772,1773,1777,1781,1785,1789],{},[624,1774],{"id":1775,"d":1776},"MJX-4-TEX-N-34","M462 0Q444 3 333 3Q217 3 199 0H190V46H221Q241 46 248 46T265 48T279 53T286 61Q287 63 287 115V165H28V211L179 442Q332 674 334 675Q336 677 355 677H373L379 671V211H471V165H379V114Q379 73 379 66T385 54Q393 47 442 46H471V0H462ZM293 211V545L74 212L183 211H293Z",[624,1778],{"id":1779,"d":1780},"MJX-4-TEX-N-2217","M229 286Q216 420 216 436Q216 454 240 464Q241 464 245 464T251 465Q263 464 273 456T283 436Q283 419 277 356T270 286L328 328Q384 369 389 372T399 375Q412 375 423 365T435 338Q435 325 425 315Q420 312 357 282T289 250L355 219L425 184Q434 175 434 161Q434 146 425 136T401 125Q393 125 383 131T328 171L270 213Q283 79 283 63Q283 53 276 44T250 35Q231 35 224 44T216 63Q216 80 222 143T229 213L171 171Q115 130 110 127Q106 124 100 124Q87 124 76 134T64 161Q64 166 64 169T67 175T72 181T81 188T94 195T113 204T138 215T170 230T210 250L74 315Q65 324 65 338Q65 353 74 363T98 374Q106 374 116 368T171 328L229 286Z",[624,1782],{"id":1783,"d":1784},"MJX-4-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",[624,1786],{"id":1787,"d":1788},"MJX-4-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",[624,1790],{"id":1791,"d":639},"MJX-4-TEX-N-32",[649,1793,1794],{"stroke":651,"fill":651,"stroke-width":652,"transform":653},[649,1795,1796,1802,1809],{"dataMmlNode":656},[649,1797,1798],{"dataMmlNode":685},[661,1799],{"dataC":1800,"xLinkHref":1801},"34","#MJX-4-TEX-N-34",[649,1803,1805],{"dataMmlNode":667,"transform":1804},"translate(722.2,0)",[661,1806],{"dataC":1807,"xLinkHref":1808},"2217","#MJX-4-TEX-N-2217",[649,1810,1812,1823],{"dataMmlNode":675,"transform":1811},"translate(1444.4,0)",[649,1813,1814,1818],{"dataMmlNode":685},[661,1815],{"dataC":1816,"xLinkHref":1817},"31","#MJX-4-TEX-N-31",[661,1819],{"dataC":1820,"xLinkHref":1821,"transform":1822},"30","#MJX-4-TEX-N-30","translate(500,0)",[649,1824,1828],{"dataMmlNode":1825,"transform":1826,"dataMjxTexclass":1827},"TeXAtom","translate(1033,393.1) scale(0.707)","ORD",[649,1829,1830,1833],{"dataMmlNode":685},[661,1831],{"dataC":689,"xLinkHref":1832},"#MJX-4-TEX-N-32",[661,1834],{"dataC":1816,"xLinkHref":1817,"transform":1822}," лет",[442,1837,1838],{},"16.68 мин",[401,1840,1841],{},"Жадные алгоритмы не всегда дают точный ответ, но они очень быстрые.\nЗадача о покрытии множеств относится к NP-трудным задачам.\nНемного позже в статьях я приведу больше примеров об NP-трудных задачах.\nА на этом знакомство с жадными алгоритмами можно считать успешным.",[398,1843,1844],{},[401,1845,1846],{},"В следующей статье речь пойдёт про динамическое программирование.",[582,1848],{"id":725},[393,1850],{":isList":1851,"title":1852},"[\"Жадные алгоритмы стремятся к локальной оптимизации в расчёте на то, что в итоге будет достигнут глобальный оптимум;\",\"Если у вас имеется NP-трудная задача, лучше всего воспользоваться приближённым алгоритмом;\",\"Жадные алгоритмы легко реализовать и быстро выполнить, поэтому из них получаются хорошие приближённые алгоритмы.\"]","ШПАРГАЛКА",[401,1854,1855,1856,1860,1861,1864],{},"Попробуйте сами скопировать и запустить код в окне ниже с интерпретатором Python и повторите примеры из статьи чтобы самим увидеть и понять как всё это работает.\nДля этого в ячейке с кодом нажмите клавиши на клавиатуре ",[1857,1858,1859],"strong",{},"Shift+Enter"," или запустите код через ",[1857,1862,1863],{},"кнопку Run"," по значку ▶.",[1866,1867],"jypiter",{},[1869,1870,1871],"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",[1869,1873,1874],{},"html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}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 pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}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);}",{"title":725,"searchDepth":740,"depth":909,"links":1876},[1877],{"id":391,"depth":740,"text":294,"children":1878},[1879,1880,1881],{"id":412,"depth":746,"text":413},{"id":516,"depth":746,"text":517},{"id":551,"depth":746,"text":552,"children":1882},[1883,1884,1885,1886,1887,1888],{"id":584,"depth":881,"text":585},{"id":714,"depth":881,"text":715},{"id":977,"depth":881,"text":978},{"id":1117,"depth":881,"text":1118},{"id":1152,"depth":881,"text":1153},{"id":725,"depth":881,"text":725},"2026-04-28T00:00:00.000Z","Жадная стратегия при решении задач. NP-трудные задачи. Приближенное решение NP-полных задач.","md","images/blog/python/st33/img.png",{},33,{"title":294,"description":1890},"KnpEiR_wkv6ANqMFZ9afkXY169MM-aJHgz0Z81Q-qAE",[1898,1900],{"title":290,"path":291,"stem":292,"description":1899,"children":-1},"Взвешенные графы. Поиск кратчайшего пути.",null,1777359499040]