Блог пользователя goodman

Автор goodman, история, 12 месяцев назад, По-русски

Хочу попросить более опытных участников сообщества поделиться тем, как вы ищете задачи для тренировок.

Сам сейчас закрепляю знания по графам: DFS, BFS, алгоритм Дейкстры, Форда-Беллмана, поиск мостов, топсорт и возможно минимальный остов. По началу пробовал решать просто задачки с тегом "графы" и сложностью >= 1500, но порешав понял, что задач слишком много, а большинство из них мусорные, при этом ещё и добавляется проблема с субъективность сложности задачки.

В общем, буду благодарен за советы и за интересные задачки!)

!תודה רבה לכולם

  • Проголосовать: нравится
  • +16
  • Проголосовать: не нравится

»
8 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

хз лол

»
8 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

try usaco

»
8 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

https://informatics.msk.ru/py-source/source/dir/240-333

Это задачи на графы, там дальше есть внутренние подразделы по конкретным алгоритмам.

»
8 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Мне кажется "нарешивать" задачи на определённую тему — не самое лучшее занятие. Изучить алгоритм X и реализовать его в одной задаче — норм. Решать после этого ещё 10 задач с этим алгоритмом — сомнительно:

1) Обычно принятие решения, использовать ли алгоритм X или нет, требует понимания этого алгоритма. Иногда в задаче вообще не будет понятно, что нужно использовать граф. Решать задачу, зная что в ней нужно использовать X тренирует навык написания этого X, а понимания не прибавляет.

2) Если прочитать про алгоритм, то написание его в течении нескольких дней обычно не вызывает трудностей. Но если попробовать это сделать через месяц — будет намного сложнее и эффективнее. Я думаю настоящая проверка на знание алгоритма происходит тогда, когда ты можешь написать его, помня лишь приблизительную идею. Если помнить слишком много, тогда можно "вспомнить" как реализовывать какую-то часть кода, и на самом деле не иметь глубокого понимания, почему та часть кода выглядит так и никак иначе.

Я думаю что ты смог прочитать про эти алгоритмы и самостоятельно их реализовать — этого достаточно, а проверить, действительно ты разбираешься в этих темах или нет, сможешь тогда, когда внезапно для себя встретишь задачу на одну из этих тем)

  • »
    »
    8 месяцев назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Я помню как после того, как в первый раз послушал как пишется алгоритм по поиску сильных компонент связанности, относительно легко его написал, и в тот же день решил ещё несколько задач на эту тему. Но когда я столкнулся с этим алгоритмом через пару месяцев, у меня остались только остаточные знания, что-то вроде "топсорт, потом дфс по обратным рёбрам". И за 2+ часа я не смог его реализовать.

    Я понял что на самом деле, я вообще не понимаю почему этот алгоритм работает и как. Я решил никуда не подсматривать, и пострараться найти сильные компоненты связанности самостоятельно.

    В итоге у меня получилось его написать, и после этого с написанием не возникало никаких проблем. Я думаю это произошло лишь потому, что я понял "почему алгоритм работает"

    А если я бы решил 100 задач на эту тему, и на всю жизнь выучил, как он пишется, мб это понимание никогда и не пришло.