Дизайн та складність алгоритмів - як мислити таким чином?


15

Моє запитання є загальним: як я починаю мислити з точки зору проектування та складності алгоритму? Я збираюся пройти аспірантуру з дизайну алгоритмів. Я записався на нього раніше, але пізніше відмовився, бо не міг не відставати від цього. Я маю сприймати цей курс як вимогу.

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

Основна проблема, яку я маю з цим курсом (і подібними теоретичними курсами), полягає в тому, як я можу знати, що рішення, які я придумав, є правильними? Я вважаю, що теоретична частина є довільною, особливо коли "доведення" певного алгоритму діє чи поводиться певним чином?

Наш курс буде використовувати стандартний текст: Вступ до алгоритмів CLRS.

Чи є підручники / сайти / книги / тощо. що може запропонувати шлях до впевненості в цій галузі?

Дякую всім,

Джейсон Дейн


2
Пропоную поглянути на цю посаду . Я спеціально пропоную книгу Уді Манбера.
MS Dousti

1
Це обговорення на StackOverflow пропонує кілька пропозицій: stackoverflow.com/questions/2256721 / ...
Jeffε

2
Я друге рекомендація Manber.
Ознайомтеся

"Як я знаю, що рішення, які я придуму, є правильними?" Ви маєте на увазі, що (1) ви придумали алгоритм, але не знаєте, як довести, що він правильний, або (2) у вас є доказ, але ви не впевнені, чи правильно він?
Юкка Суомела

Перший крок: припиніть давати прямі відповіді та зверніться до інших рішень. ;)
Рафаель

Відповіді:


18

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

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

Однак книга Сіпсера корисна лише для складності та NP-повноти, її недостатньо буде замінити книгу CLRS. Єдина проблема з CLRS-книгою полягає в тому, що її перевагою всебічного висвітлення може стати її слабкість, оскільки книга може виглядати досить страшно або непосильною для студентів. Тому моя порада полягає в тому, що вам слід дійсно зайти в бібліотеку і шукати книги за алгоритмами, переглядати одну за одною і вибирати ті, які найбільше відповідають вашому мисленнєвому малюнку. І знову не забудьте робити вправи!

Щодо алгоритмів, я особисто пропоную наступні книги (окрім тих, які запропонували Sadeq та JeffE):

  • Дуже читабельні та красиві книжкові алгоритми С. Дасгупта, CH Пападімітріу та У. В. Вазірані.
  • Записки вбивці (або чернетка книги) Джеффа Еріксона. (Оскільки JeffE занадто скромний, щоб пропонувати власні замітки, я повинен це зробити сам.)

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


8
+1 для нота вбивці Джеффа. Мені завжди подобається читати їх. Арабська каліграфія слова Алгоритм дуже красива.
Мохаммед Аль-Туркстані
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.