Ответ 1
Введение в алгоритмы, третье издание, Cormen, Leiserson, Rivest и Stein - хорошее введение в алгоритмы и структуры данных. В конце каждой главы у него много упражнений. большинство из них просты, но есть еще более сложные.
Можете ли вы порекомендовать мне книгу или (лучше!) сайт со многими трудными проблемами и упражнениями о структурах данных?
Я уже отвечаю на вопросы проекта Эйлера, но эти вопросы касаются интересных, но необычных алгоритмов. Я едва использовал даже простое дерево. Может быть, есть сайт с упражнениями вроде: эй, вам нужно рассчитать это:.... Сделайте это, используя дерево. Теперь сделайте это, используя молнию. Загрузите решение C (Haskell, Lisp, даже Pascal или Fortress go). О, ваше решение так медленно!
Самообразование очень тяжелое, тогда вы пытаетесь изучить очень общие, фундаментальные вещи. Как я могу помочь себе с ними, не посещая курсы или что-то еще?
Введение в алгоритмы, третье издание, Cormen, Leiserson, Rivest и Stein - хорошее введение в алгоритмы и структуры данных. В конце каждой главы у него много упражнений. большинство из них просты, но есть еще более сложные.
Видео-лекции Национальной программы усовершенствованного обучения технологиям (NPTel) на Канал NPTEL Youtube. Они осуществляются семью ИИТ и Бангкором Индии (IISc Bangalore) из Индии и финансируются MHRD, правительством Индии.
Еще много технических лекций.
Awesome free eBook - " Структуры данных и алгоритмы". Содержит реализацию общих алгоритмов в псевдокоде и в явном виде. Кроме того, неплохие и понятные схемы и графика.
Даже Джон Скит упомянул об этом в своем блоге.: -)
Кроме того, это менее 100 страниц книги (как вы знаете, много программистов не читают некоторые книги).
Это должно быть дубликат.
Я бы рекомендовал открытый учебный сайт MIT здесь. Там алгоритмы курсов в разделе "Электротехника и информатика" каким-то образом вниз страницы.
6.006 - Introduction to Algorithms
6.046J - Introduction to Algorithms (SMA 5503)
Я рекомендую последнее. Материалы находятся на сайте. Видео, вероятно, лучше всего доступно с YouTube здесь - поиск "алгоритмов смены". учебник пользуется большим уважением. Третье издание просто выходит, второе издание соответствует курсу. Первое издание также было включено в состав Dr Dobbs Algorithms and Data Structures CD ROM.
У Niklaus Wirth есть книга Algorithms and Data Structures, доступная для загрузки с личного сайта . У меня есть версия для печати Modula 2, и хотя она не заменяет Cormen (или aho hopcroft ullman и т.д.), Это хорошая книга.
Помимо вышеупомянутых Cormen, Leiserson и Rivest, есть также очень новая книга Питера Брасса, "Advanced Data Structures" . В C имеется относительно уродливый пример кода, и автор несколько фанатичен в отношении производительности (например, он не использует рекурсию), но теоретическое содержание этой книги является блестящим и уникальным, оно вряд ли пересекается с Cormen. Я ожидаю, что это станет классикой.
Если вы хотите попрактиковаться, вы можете взглянуть на http://www.topcoder.com, они предлагают проблемы alorithm.
http://www.youtube.com/watch?v=QMV45tHCYNI
CS 61B: Структуры данных - осень 2006 г.
Инструктор: Джонатан Шевчук
Основные динамические структуры данных, включая линейные списки, очереди, деревья и другие связанные структуры; массивы строк и хеш-таблицы. Управление хранением. Элементарные принципы разработки программного обеспечения. Абстрактные типы данных. Алгоритмы сортировки и поиска. Введение в язык программирования Java.
Также вы можете прочитать эту книгу для алгоритмов..
http://www.amazon.com/Data-Structures-Algorithms-Made-Easy/dp/1466304162
Если вы хотите использовать просветительскую альтернативу для алгоритмов обучения, вы всегда можете попробовать: Рабхи Ф., Лапальме Г. Алгоритмы.. подход к функциональному программированию.
Авторы бросают вызов более традиционным методы обучения алгоритмов используя функциональное программирование контекста, а Haskell - как язык исполнения. Это ведет к меньше, яснее и элегантнее программы, которые позволяют программисту понимать сам алгоритм быстрее и использовать это понимание альтернативы решения. Размещение акцента на разработки программ, а не математические свойства алгоритмов, в книге используется последовательность примеры практического программирования для развиваться в решении проблем с читателями навыки, которые легко переносятся к парадигмам другого языка. К другим языковым парадигмам.
Что касается сайта с (жесткими) упражнениями, вы всегда можете попытаться решить, я рекомендую: spoj.
Хороший учебник с упражнениями в конце кажется лучшим способом.
В дополнение к действительно хорошему учебнику Введение в алгоритмы, третье издание, Cormen, Leiserson, Rivest и Stein, я бы очень рекомендовал смотреть онлайн-доступные видео лекций, предоставленных Лейсорсон в Массачусетском технологическом институте. Если у вас есть книга и лекции, это похоже на то, что вы учились в Массачусетском технологическом институте, -)
http://videolectures.net/mit6046jf05_introduction_algorithms/