Хочу попросить более опытных участников сообщества поделиться тем, как вы ищете задачи для тренировок.
Сам сейчас закрепляю знания по графам: DFS, BFS, алгоритм Дейкстры, Форда-Беллмана, поиск мостов, топсорт и возможно минимальный остов. По началу пробовал решать просто задачки с тегом "графы" и сложностью >= 1500, но порешав понял, что задач слишком много, а большинство из них мусорные, при этом ещё и добавляется проблема с субъективность сложности задачки.
В общем, буду благодарен за советы и за интересные задачки!)
!תודה רבה לכולם
https://informatics.msk.ru/py-source/source/dir/240-333
Это задачи на графы, там дальше есть внутренние подразделы по конкретным алгоритмам.
Мне кажется "нарешивать" задачи на определённую тему — не самое лучшее занятие. Изучить алгоритм X и реализовать его в одной задаче — норм. Решать после этого ещё 10 задач с этим алгоритмом — сомнительно:
1) Обычно принятие решения, использовать ли алгоритм X или нет, требует понимания этого алгоритма. Иногда в задаче вообще не будет понятно, что нужно использовать граф. Решать задачу, зная что в ней нужно использовать X тренирует навык написания этого X, а понимания не прибавляет.
2) Если прочитать про алгоритм, то написание его в течении нескольких дней обычно не вызывает трудностей. Но если попробовать это сделать через месяц — будет намного сложнее и эффективнее. Я думаю настоящая проверка на знание алгоритма происходит тогда, когда ты можешь написать его, помня лишь приблизительную идею. Если помнить слишком много, тогда можно "вспомнить" как реализовывать какую-то часть кода, и на самом деле не иметь глубокого понимания, почему та часть кода выглядит так и никак иначе.
Я думаю что ты смог прочитать про эти алгоритмы и самостоятельно их реализовать — этого достаточно, а проверить, действительно ты разбираешься в этих темах или нет, сможешь тогда, когда внезапно для себя встретишь задачу на одну из этих тем)
Я помню как после того, как в первый раз послушал как пишется алгоритм по поиску сильных компонент связанности, относительно легко его написал, и в тот же день решил ещё несколько задач на эту тему. Но когда я столкнулся с этим алгоритмом через пару месяцев, у меня остались только остаточные знания, что-то вроде "топсорт, потом дфс по обратным рёбрам". И за 2+ часа я не смог его реализовать.
Я понял что на самом деле, я вообще не понимаю почему этот алгоритм работает и как. Я решил никуда не подсматривать, и пострараться найти сильные компоненты связанности самостоятельно.
В итоге у меня получилось его написать, и после этого с написанием не возникало никаких проблем. Я думаю это произошло лишь потому, что я понял "почему алгоритм работает"
А если я бы решил 100 задач на эту тему, и на всю жизнь выучил, как он пишется, мб это понимание никогда и не пришло.