Как развивать алгоритм интуиции?

18

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

Моя проблема: я не понимаю ту же интуицию, когда речь заходит о передовых алгоритмах. Я больше чувствую задачу создания еще одного Facebook , затем создавая еще один Google , или проект «Музыкальный геном» . Вероятно, потому, что я уже давно работал над building , но у меня мало опыта с составом .

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

(Этот вопрос не имеет ничего общего с Алгоритмическая композиция . Ну, почти ничего)

    
задан Asaf R 21.02.2009 в 23:18
источник

6 ответов

8

+1 Тот, кто сказал, что это лучший учитель.

Существует несколько онлайн-порталов, которые имеют множество проблем с программированием, которые вы можете предоставить своим собственным решениям и получить автоматическую индикацию прохода / сбоя.

  1. Ссылка
  2. Ссылка
  3. Ссылка
  4. Ссылка
  5. Ссылка

учебный сайт USACO - это программа обучения, которую проходят все американские участники олимпиады. Он идет шаг за шагом, вводя все более сложные алгоритмы, когда вы идете.

    
ответ дан Himadri Choudhury 22.02.2009 в 00:56
9

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

    
ответ дан John D. Cook 22.02.2009 в 00:47
7

Стив Йегге назвал «Руководство по разработке алгоритмов» в от его тирадов. Я сам этого не видел, но похоже, что это просто билет из его описания.

  

Моим абсолютным фаворитом для такого рода подготовки интервью является «Руководство по разработке алгоритмов» Стивена Скиена. Больше, чем любая другая книга, это помогло мне понять, насколько удивительно обыденные (и важные) проблемы графа - они должны быть частью инструментария каждого рабочего программиста. Книга также охватывает основные структуры данных и алгоритмы сортировки, что является хорошим бонусом. Но золотой рудник является второй половиной книги, которая представляет собой своего рода энциклопедию 1-пейджеров на миллионы полезных проблем и различные способы их решения без особых деталей. Почти каждый 1-пейджер имеет простую картинку, что позволяет легко запомнить. Это отличный способ узнать, как идентифицировать сотни типов проблем.

    
ответ дан duffymo 21.02.2009 в 23:25
  • +1 для справки по книге. Это выглядит довольно интересно. –  cletus 21.02.2009 в 23:31
5

проблемная область

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

декомпозиция и отображение

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

модель

Моделируйте решение, по крайней мере, в своей голове, и пройдите через него, чтобы убедиться, что он работает правильно. При необходимости отрегулируйте (см. Разложение и сопоставление, выше).

Состав / интерфейсы

Много раз вы можете найти элементы проблемы и элементы решения, которые сопоставляются друг с другом и дают полезные результаты. Эта структура и конструкция интерфейса обеспечивают ядро ​​решения, а также уменьшают объем оставшейся проблемы. Итак, вы просто возвращаетесь к вершине с меньшей начальной проблемой и снова проходите через нее.

опыт

Опыт - лучший учитель, конечно, но чтение о различных проблемах и решениях также будет полезно. Изучение некоторых из известных алгоритмов и их приложений также очень полезно, например. Dijkstra , Бресенхам , Унификация и, конечно же, теория графов .

    
ответ дан Steven A. Lowe 22.02.2009 в 00:09
0

Я не уверен, что интуиция можно культивировать, но я думаю, что знаю, что вы просите. Чем больше проблем вы решаете, тем больше информации и опыта вы имеете в своем распоряжении для будущих проблем. Итак, я говорю просто практику. Практика программирования приложений реального мира, и у вас много проблем. Иногда решение головоломок может быть очень учебным.

    
ответ дан Jim Anderson 22.02.2009 в 01:00
0

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

    
ответ дан Paul Nathan 22.02.2009 в 01:08