Як дізнатися алгоритми та структури даних? [зачинено]


38

Це продовження мого попереднього питання, де я запитав, чи потрібно вивчати алгоритми та структури даних. Я відчуваю, що так.

Зараз я працюю в середовищі, коли я ніколи не отримаю шансу навчитися цьому, експериментуючи або практично або в будь-якому завданні. Який правильний підхід, як правильні книги, правильний вид проблем, правильний вид ресурсів, через які я можу отримати шість місяців чи рік-два, щоб вивчити алгоритми та структури даних? А також формую мій погляд так, що він може пов’язати проблеми зі структурами даних та алгоритмами.


3
Кормен - ваш друг :)
Лукаш Мадон

1
@lukas: Все ще не закінчив, хоча там є досить багато математики, з якою мені не так комфортно. Моє знання алгоритмів, структур даних та їх аналізу було набагато більше, ніж будь-яке інше джерело :)
Матьє М.

Ви також можете спробувати мій проект, який описує популярні алгоритми та структури даних простіше,
malejpavouk

Відповіді:


40

Прочитайте.

Ні, справді, читайте.

Прочитайте все про алгоритм та дизайн, які ви можете знайти. Є феноменальні книги там. Книги алгоритмів Sedgewick хороші. Посібник з дизайну алгоритмів Skiena також хороший. Разом ці книги слідкують за мною на кожній книжковій полиці на кожній роботі, яку я відвідую, а також "Міфічна людина-місяць".

Тоді запитайте.

Поговоріть з людьми, яких ви поважаєте. Запитайте їх, які у них були рішення та чому вони приймали рішення, які вони зробили. Хороші завжди зможуть вам сказати: "Я вирішив зробити X, тому що це краще, ніж A, B цими способами. Я міг би піти з C, але я вважав, що це був кращий вибір через це".

Далі, зробіть.

Будуйте речі. Створюйте речі, які ви ніколи не будете використовувати. Створюйте речі, які вам ніколи не знадобляться. Ідіть написати програму, яка розгадує головоломку судоку. Тепер переходимо до цього знову. І знову. Побудуйте його 5 абсолютно різними способами. Побудуйте програму, яка генерує головоломки судоку та подає їх у розв’язувачі. Знайдіть, який вирішувач найшвидший. І потім...

Дізнайтеся, чому.

"Що" майже ніколи не важливо. Я маю на увазі, так, дуже важливо закінчити проект під рукою, але в кінці кінців, якщо ви знаєте "що", не знаючи "чому", то, можливо, ви ніколи цього не робили в першу чергу. Ви отримали кращу точку на своєму резюме. Іди діставай печиво і вітай себе. "Чому" настільки важливіше, ніж "що".

І для запису Судоку був прикладом. Я витратив багато вільного часу, переживаючи цю вправу, використовуючи точку логічних головоломок на Kongregate і багато чого навчився в дорозі.

http://www.amazon.com/Bundle-Algorithms-Parts-1-5-Fundamentals/dp/020172684X/ http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693/ http://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959/


дійсно дуже гарна відповідь! Мені подобається, як ти сформулював свої поради!
paxRoman

Я також всюди беру із собою книги Седжевік та Скіенни! це, мабуть, ще одна причина, чому я любив вашу відповідь!
paxRoman

і Кормен до суміші, будь ласка.
AruniRC

1
У вік постійно зростаючого потягу до інформації в Інтернеті важливо додати: читати книги (не виключно, звичайно). Послідовне, узгоджене введення у справу, яка перевищує 2-3 сторінки, що розділені HTML, - це хороша річ ™ ! Не варто недооцінювати це (і так, звичайно, електронні книги нормально).
Йоахім Зауер

1
Домовились. Послідовність є ключовою. Важко обробляти структури даних, коли ви отримуєте один-два з десятка різних джерел. Книги також мають кращі діаграми (деякі блоги / інтернет-джерела, але як узагальнені книги - краще). У книгах Sedgewick є особливо хороший поєднання діаграм, простий у дотриманні коду та опису.
Hounshell

10

Алгоритми

Я брав уроки магії в груповій обстановці, коли мені було дванадцять років. Звали мага Джо Карота. Один раз він зробив трюк, і я вирвався: "Як ти це зробив?" У той день він сказав щось, що з мого часу застрягло.

Відповідь Джо: "Майкл, якщо ти справді хочеш знати, як робиться цей трюк, ти повинен з'ясувати, як би ти це зробив сам".

Ну, звичайно, це не те, що я хотів почути, але це зосередило увагу на вирішенні проблем. Це було вирішення проблем з моєї точки зору. Якщо моя перша спроба вирішити проблему зробила сімнадцять кроків і була справді клунькою, хорошою новиною було те, що я вирішив проблему.

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

Це спрацювало тоді і досі працює.



2

Подивіться, чи можете ви пройти онлайн-курс, чи пройти навчання. Якщо цього не відбулося, це швидко з’явилося в пошуку Google. Я щойно взяв заняття з цієї весни минулої весни (вперше я перейшов з EE до програмного забезпечення), і підібрати його було не так складно, якщо ви добре розумієте покажчики .


2

Якщо ви не в змозі пройти курс курсу, я рекомендую Посібник з проектування алгоритму. Там це безкоштовний PDF тут , але це варто того , щоб справжню книгу , якщо ви плануєте програмувати професійно.


Рішення тут. Я вважаю, що здорово мати їх під час навчання самостійно: www2.algorithm.cs.sunysb.edu:8080/mediawiki/index.php/…
Девід Рінк

1

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


Я випускник інформатики і з тих пір пройшло шість років. Я ніколи не зосереджувався на цій темі, там мене приваблювало Інтернет, зручність використання, клієнтський сервер, і я працюю лише над цими полями, але зараз я відчуваю, що я також повинен їх вивчити. Які ваші думки.
sushil bharwani

Поверніться назад і
пройдіть

1

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

Рішення можна подавати на різних мовах програмування від C / C ++ до JavaScript, Lisp, Smalltalk, асемблера + ще 40. Таким чином, ви можете повністю зосередитися на вирішенні проблеми будь-якою мовою програмування, з якою ви відчуваєте себе комфортно.


1

CLRS

Це, безумовно, мій улюблений ресурс. Я використав це в моєму курсі алгоритмів бакалавра з інформатики і через 4 роки придбав книгу, щоб прочитати самостійно, щоб підготуватися до моїх курсів MS Comp Sci. Це не легко прочитати будь-якими способами, але якщо ви працюєте над тим, щоб зрозуміти деякі з представлених математичних / доказів, а потім реалізувати псевдо-код улюбленою мовою (мовами), то варто вартувати дещо здоровенну ціну. Інші посібники з дизайну алгоритму також згадували, що це також чудовий ресурс для виявлення проблем навчання, але я знайшов, що CLRS є кращим для чистої деталізації.


0

Ви завжди можете спробувати щось подібне: http://codekata.pragprog.com/

Я завжди вчився краще, думаючи це на відміну від читання. Однак ви повинні мати документацію / матеріал для читання, щоб шукати відповіді.


0

Купіть цю книгу , позичте або вкрадіть цю! Відпочинок буде слідувати :)

Вступ до алгоритмів Рівеста і Кормена.Спочатку буде дуже важко слідувати, як тільки ви пройдете пояснення про Мергезорт у вступі. Для вас все гарно розгортається.

Плюс ви станете краще, якщо вирішите проблеми, наведені в книзі. Я ніколи не хотів розлучатися з книгою навіть після закінчення середньої школи. Це так добре.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.