Итак, продолжаем читать книгу Бхаргава А. - Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих.

В предыдущей главе мы познакомились с хэш-функциями. Они позволяют за константное время находить адрес ячейки, соответствующей определенному значение. Иными словами, любое значение трансформируется хэш-функцией в почти уникальный ключ.
Пусть есть хэш-фунция h(x), тогда могут иметь место следующие равенства:
h("cat") = 2
h("dog") = 4
h("mouse") = 1
И каждый раз, когда мы будем вызывать h к данным словам, мы будем получать те же значения. Хорошие хэш-функции должны генерировать уникальные значения. Если же хэш-функция выдает значение, которое уже встречалось, к примеру, h("bird") = 4, то такая ситуация называется коллизией. Хэш-функции широко применяются в программировании, в python на них построены словари.

В следующей главе "6. Поиск в ширину" мы познакомимся с графами. Графы это мегаполезная структура, которая вам точно рано или поздно пригодится. С помощью графов можно описывать самые разные сущности: маршруты, социальные связи, взаимодействия молекул и т.д. Кроме этого, мы узнаем про алгоритм поиска в ширину - один из базовых алгоритмов на графах.

Читаем до следующей субботы, если есть вопросы, задаем их в чате тг (https://t.me/learnpythonforfun_chat). В конце следующей недели я сделаю небольшую выжимку по главе и подготовлю опрос.

Книжка несложная, успехов в прочтении :)

#книжный_клуб #алгоритмы
Какова временная сложность поиска в ширину на графе с V вершин и E ребер?
Anonymous Quiz
44%
O(V*E)
2%
O(V-E)
19%
O(V+E)
10%
O(V)
24%
Посмотреть ответы
Итак, продолжаем читать книгу Бхаргава А. - Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих.

В предыдущей главе мы познакомились с графами и поиском в ширину. Граф является довольно простой, но мощной абстракцией. Граф представляет собой набор вершин и ребер, соединяющих эти вершины. С помощью графов можно описывать самые разные сущности: маршруты, социальные связи, взаимодействия молекул и т.д. Алгоритм поиска в ширину позволяет совершить обход графа из некой заданной начальной вершины. Обход графа происходит поуровнево: сначала просматриваются все вершины, достижимые из текущей (1ый уровень), затем просматриваются все вершины, достижимые из вершин первого уровня, и т.д.
В следующей главе "7. Алгоритм Дейкстры" мы познакомимся с алгоритмом нахождения кратчайшего пути во взвешенном графе (в графе, у которого ребра имеют веса). Подобные алгоритмы очень часто применяются на практике. К примеру, если вам необходимо добраться из города А в город Д, а проехать к последнему вы можете через один из городов Б, В, Г, то алгоритм нахождения кратчайшего пути поможет вам найти....кратчайший путь.

Читаем до следующей субботы, если есть вопросы, задаем их в чате тг (https://t.me/learnpythonforfun_chat). В конце следующей недели я сделаю небольшую выжимку по главе и подготовлю опрос.

Книжка несложная, успехов в прочтении :)

#книжный_клуб #алгоритмы
👍2
Какой алгоритм лучше подходит для поиска кратчайшего пути во взвешенном графе?
Anonymous Quiz
60%
Алгоритм Дейкстры
28%
Алгоритм поиска в ширину
12%
Посмотреть ответы
Итак, продолжаем читать книгу Бхаргава А. - Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих.

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

В следующей главе "8. Жадные алгоритмы" мы познакомимся с понятием жадности. Мы узнаем, как можно решать задачи, для которых оптимальные алгоритмы работают слишком долго. Примеры такой задачи - построение оптимального маршрута через несколько точек. Жадные алгоритмы построены на удивительно простой концепции, которая, однако, позволяет достигать достаточно хороших результатов.

Читаем до следующей субботы, если есть вопросы, задаем их в чате тг (https://t.me/learnpythonforfun_chat). В конце следующей недели я сделаю небольшую выжимку по главе и подготовлю опрос.

Книжка несложная, успехов в прочтении :)

#книжный_клуб #алгоритмы
Итак, продолжаем читать книгу Бхаргава А. - Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих.

В предыдущей главе мы познакомились с понятием жадности в алгоритмах. Что такое жадность? Жадность - это свойство механизма принятия решений на каждом шаге алгоритма. На каждом шаге алгоритма решение принимается так, чтобы как можно больше приблизиться к цели на этом шаге. К примеру, пусть вам надо доехать из Великого Новгорода во Владивосток. Вы можете либо продумать свой маршрут полностью и получить что-то типа Новгород - Москва - Владивосток, либо применить жадную стратегию и из Новгорода поехать в город, который ближе всего к Владивостоку. Из второго города снова поехать в город, который ближе всего к Владивостоку. В конечном счета у вас может получиться такой маршрут: Новгород - Сыктывкар - Красноярск - Владивосток. Этот маршрут займет больше времени, но он все равно будет достаточно хорош. Иными словами, жадные алгоритмы пытаются оптимально выбирать на каждом шаге, надеясь, что общее решение тоже будет достаточно хорошим (но это не гарантировано).

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

Эту главу я предлагаю читать пару недель. Тема довольно большая, я крайне рекомендую ознакомиться с дополнительными материалами для более глубокого понимания. Если есть вопросы, задаем их в чате тг (https://t.me/learnpythonforfun_chat). Через пару недель я сделаю небольшую выжимку по главе и подготовлю опрос.

Книжка несложная, успехов в прочтении :)

#книжный_клуб #алгоритмы
Небольшой апдейт: опрос по динамическому программированию будет в следующие выходные. Тема довольно сложная, постраюсь позже расписать её, как сам понял.
Для тех, кто хочет глубже углубиться, есть неплохая книга:
Томас Х. Кормен, Чарльз И. Лейзерсон, Рональд Л. Ривест, Клиффорд Штайн. Алгоритмы: построение и анализ, 3-е издание
Рекомендую именно третье издание, оно может быть найдено в файлах вк (https://vk.com/docs) в формате djvu.
Итак, продолжаем читать книгу Бхаргава А. - Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих.

В предыдущей главе мы познакомились с понятием динамического программирования. Что такое динамическое программирование? Это способ решать задачи, разбивая их на схожие подзадачи. Решение подзадач мы запоминаем и используем для конструирования общего решения. К примеру. Пусть нам нужно посчитать, сколько есть путей из города A в город Z. Мы знаем, к примеру, что до города Z можно добраться из городов X и Y. То есть, теперь нам надо посчитать сколькими способами можно добраться до городов X и Y. Это ведь точно те же задачи, только поменьше! Решая такие задачи "поменьше" и занося результаты их решений в таблицу, мы потом сможем решить и всю задачу.

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

Читаем до следующей субботы, если есть вопросы, задаем их в чате тг (https://t.me/learnpythonforfun_chat). В конце следующей недели я сделаю небольшую выжимку по главе и подготовлю опрос.

Книжка несложная (мы её почти закончили!), успехов в прочтении :)

#книжный_клуб #алгоритмы
Опрос по десятой главе книги Грокаем алгоритмы.

Пусть дано 12 точек: 6 точек типа A и 6 точек типа B. Нужно классифицировать новую точку по алгоритму k ближайших соседей, где k = 4. Все точки типа A располагаются на расстоянии 4 от новой точки, все точки типа B располагаются на расстоянии 3 или 2. Какой тип у новой точки?

#книжный_клуб #алгоритмы
Какой тип у новой точки?
Anonymous Quiz
24%
A
58%
B
18%
Посмотреть ответы
Итак, завершаем читать книгу Бхаргава А. - Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих.

В предыдущей главе мы познакомились с алгоритмом k ближайших соседей. Этот алгоритм позволяет классифицировать новый объект, зная класс у наиболее похожих на него объектов. К примеру, пусть нам надо классифицировать неизвестный цветок. Нам известен его вес и количество лепестков. Кроме того, нам известны классы двух группок цветков, их веса и лепестковость. Идея алгоритма в том, что мы классифицируем неизвестный цветок по его k ближайших соседей: мы находим наиболее близкие по лепестковости и весу k соседей одного класса и причисляем наш цветок к тому же классу.

В следующей главе "11. Что дальше?" поверхностно рассматриваются другие алгоритмы, которые не вошли в книгу. Алгоритмы там приведены очень нужные и распространенные, я считаю, что о них должен знать каждый программист. Эта глава даёт только очень общее представление, поэтому и её прочтение не составит большого труда.

Читаем до следующей субботы, если есть вопросы, задаем их в чате тг (https://t.me/learnpythonforfun_chat). В конце следующей недели...а всё, книжку мы уже дочитаем, опроса не будет. Будем потихоньку возвращаться к материалам по python.

#книжный_клуб #алгоритмы
🔥1
Ура, мы завершили читать книгу Бхаргава А. - Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих. Как по мне, книга даёт неплохое первое представление об алгоритмах. Мы узнали, что такое алгоритмы, какие бывают их типы, как оценивать алгоритмы. Давайте очень коротко пройдемся по этим вопросам.

Что же такое алгоритм? Это последовательность действий, приводящих к результату, желательно за конечное число шагов. Есть несколько алгоритмических подходов: жадные алгоритмы, динамическое программирование, линейное программирование. Кроме этого, мы узнали, что существуют разные типы структур данных, над которыми работают алгоритмы: массивы, графы, деревья, очереди и т.д. Оценивать же алгоритмы можно по их пространственно-временной сложности: сколько места или времени они займут для выдачи результата. Еще мы узнали, что некоторые задачи требуют очень долгого времени для нахождения оптимального решения. В таких случая часто используются алгоритмы, которые с некоторой вероятностью выдают решение близкое к оптимальному (или оптимальное).

В общем, чтение книжки завершено. Пока что я беру небольшой перерыв от книжного клуба. Если у вас есть предложения, что еще можно таким образом почитать, предлагайте в нашем тг-чате: https://t.me/learnpythonforfun_chat.

И небольшой опрос напоследок.

#книжный_клуб #алгоритмы
Небольшой анонс.

Мы тут с чатом решили, что неплохо было бы совместно пройти какой-нибудь курс. И в этот раз этим каким-нибудь станет курс по FastAPI:
https://stepik.org/course/179694

FastAPI - это популярный веб-фреймворк, написанный преимущественно на python. Я надеюсь, что в рамках курса каждый из нас сможет ознакомиться с основными составляющими веб-разработки на python и получить в результате мини пет-проект в своё портфолио.

Для прохождения курса необходимо знать python (курс с нуля: https://stepik.org/course/58852/). Лучше знать еще много всего прочего, но знание python прямо необходимо. Остальное, вероятно, можно компенсировать мотивацией.

Проходить начнем с 1 августа. Основное общение будет происходить в тг-чате: https://t.me/learnpythonforfun_chat. Надеюсь, курс окажется полезным для всех нас :)
🔥9
Для тех, кто увлекается data science, небольшая задача по теории вероятностей.
Forwarded from Data&Knowledge
Задача.

Есть три коробки:

первая содержит две золотых монеты.
вторая содержит две серебряные монеты.
третья содержит одну золотую и одну серебряную монету.

После выбора случайной коробки и случайной монеты из нее, выбранная монета оказалась золотой. Какова вероятность того, что вторая монета в выбранной коробке также золотая?
Forwarded from Data&Knowledge
Какова вероятность, что вторая выбранная монета также золотая?
Anonymous Quiz
19%
2/3
51%
1/2
6%
5/6
24%
1/3
Несколько человек упомянули эту задачу в комментариях, поэтому держите :)
Forwarded from Data&Knowledge
Задача.

Еще одна задача из той же серии.

Представьте, что вы стали участником игры, в которой вам нужно выбрать одну из трёх дверей. За одной из дверей находится автомобиль, за двумя другими дверями — козы. Вы выбираете одну из дверей, например, номер 1, после этого ведущий, который знает, где находится автомобиль, а где — козы, открывает одну из оставшихся дверей, например, номер 3, за которой находится коза. После этого он спрашивает вас — не желаете ли вы изменить свой выбор и выбрать дверь номер 2? Увеличатся ли ваши шансы выиграть автомобиль, если вы примете предложение ведущего и измените свой выбор?
👍1