Меня попросили порекомендовать ресурс (он-лайн, книга или учебник), чтобы изучить алгоритмы (в смысле MIT Intro to Algorithms) для не-CS или Math-майоров. Очевидно, книга MIT слишком вовлечена, и некоторые из более легких процедур (например, алгоритмы OReilly в двух словах) по-прежнему выглядят так, как будто вам нужно иметь некоторый опыт в алгоритмическом анализе. Есть ли ресурс, который представляет материал таким образом, что разработчики, которые не имеют опыта теоретической информатики, будут полезны?
Ресурс для обучения Алгоритмы для не-CS/Math градусов
Ответ 1
Я думаю, что лучший способ изучить алгоритмы - через различные сайты соревнований.
- USACO - мой личный фаворит, поскольку он дает четкий путь через материал.
- TopCoder - уже упоминалось
- Sphere Online Judge - отлично, если вы хотите работать на другом языке, отличном от C/С++/Java
Что касается книг, лучшее единственное введение, которое я видел для не-математического специалиста, - это Структуры данных и алгоритмы. Он проходит через алгоритм по очереди и показывает вам, как он разлагается математически, что-то CLRS в противном случае отличный раздел анализа немного менее понятен.
Skiena Руководство по разработке алгоритмов также отлично, как и его Проблемы программирования, который по существу является учебным пособием в онлайн-судьи Valladolid.
Честно говоря, я думаю, что самая полезная вещь, которую может сделать новичок, - это реализовать различные алгоритмы - сортировать слияние, скажем, с помощью Quicksort, - и умножить время на различные входы. Создайте таблицу с графиком, который показывает их рост с течением времени. Очень немногие неспециалисты будут иметь терпение или ноу-хау, чтобы установить отношение повторения и решить их путь через него. Но вы должны понимать влияние, скажем, O n ^ 2 роста с течением времени, и нет лучшего способа узнать это, чем смотреть, как ваша собственная программа пробивается через стек памяти.:)
Я говорю это как не-CS, не-математический программист, который провел немало месяцев, обдумывая алгоритмический анализ.
Ответ 2
Я пошел бы на Руководство по разработке алгоритмов, Стивен Скиена. Это очень читаемо и начинается с основ простым и понятным способом. Например, он очень хорошо описывает нотацию большого О. Акцент делается на практическом применении, которое является большим бонусом для новичков, прибывающих из нетеоретического поля.
Вторая половина книги - это ссылка на общие проблемы алгоритмов и практические подходы к их решениям. Я нашел его неоценимым в качестве учебного пособия и теперь как ссылку.
Ответ 3
Я не уверен, какую книгу MIT вы имеете в виду, но канонический текст CLRS. Я не думаю, что это действительно предполагает любую предпосылку, помимо математики средней школы.
Лично я обнаружил, что TopCoder конкурсы алгоритмов в течение последних нескольких лет были лучшим способом для меня изучить общие алгоритмов и применять их на практике. Возможно, вы должны попробовать то же самое. Независимо от того, что вы делаете, я предлагаю вам потратить гораздо больше времени на клавиатуру, реализуя вещи, которые вы изучаете, чем время в голове, потому что это способ действительно усвоить различные методы.