Запоминание важных алгоритмов, таких как бинарный поиск - PullRequest
13 голосов
/ 02 февраля 2010

Запоминаете ли вы такие алгоритмы, как бинарный поиск / быстрая сортировка / что угодно. Если да, то есть ли у вас какие-то хитрости для этого?

Ответы [ 7 ]

6 голосов
/ 02 февраля 2010

Я думаю, что стоит вспомнить понятия , стоящие за важными алгоритмами и структурами данных. Но для реализации я бы посоветовал использовать библиотечную функцию, если это вообще возможно. Легко забыть о пограничных случаях, когда вы записываете алгоритм - и вполне вероятно, что вы не будете думать о них, если будете проводить модульный тест. В результате даже такие простые алгоритмы, как бинарный поиск, могут быть сломаны:

Я хорошо помню первую лекцию Джона Бентли по Алгоритмам в КМУ, где он спросил всех нас, поступающих в аспирантуру. студенты написали бинарный поиск, а затем проанализировали одну из наших реализаций перед классом. Конечно, он был сломан, как и большинство наших реализаций.

Из блога Google Research . Остальная часть текста также заслуживает внимания, но не о запоминании алгоритмов.

6 голосов
/ 02 февраля 2010

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

6 голосов
/ 02 февраля 2010

Всегда лучше найти способы понять основной принцип таких алгоритмов, чем запоминать их. Например, в быстрой сортировке используется парадигма Divide and Conquer (это метод проектирования для решения определенного класса задач).

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

Разработка примеров также лучше прояснит алгоритм.

Надеюсь, это поможет.

ура

2 голосов
/ 02 февраля 2010

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

1 голос
/ 03 февраля 2010

Вы должны знать общие принципы, лежащие в основе этих алгоритмов, потому что они являются основами программирования, и это даст вам представление о том, где их следует использовать. Например, вы должны понимать быструю сортировку достаточно хорошо, чтобы понять, почему это может быть O (N ^ 2) в патологических случаях.

Тем не менее, абсолютно бессмысленно запоминать достаточно деталей, чтобы иметь возможность кодировать реализации этих алгоритмов с точки зрения качества производства с первой попытки. Для этого и нужны библиотеки. Например, если все, что вы помните, это каноническую трехстрочную версию быстрой сортировки, и вы не можете вспомнить, как реализовать такую, которая не может легко найти случаи и сортировки O (N ^ 2), то в этом нет ничего плохого с этим.

0 голосов
/ 02 февраля 2010

Нет, для этого есть Интернет. Я бы предпочел, чтобы страница такого рода знаний, а не занимала место для чего-то более полезного.

0 голосов
/ 02 февраля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...