Запоминание алгоритмов из программирования

Перейти вниз

Запоминание алгоритмов из программирования

Сообщение автор Selendis в Пт Фев 23, 2018 11:33 pm

Доброе время суток, уважаемый Админ. Надеюсь, моя тема будет многим полезна и она уж точно достойна того, чтобы ее в рассылку включить.
Суть в том, чтобы запоминать точный вариант написания кода(или псевдокода) для алгоритмов в программировании.
У вас ранее была интересная статья о запоминании основ языка программирования и она многое упрощает. Но в программировании есть также набор идиом, которые неплохо бы знать специалисту. И если написание простого цикла или перебор и поиск в массиве - это примитивный код в 3-4 строки, то алгоритмы посложнее уже чуть длиннее и их так просто не запомнишь.
Это часто спрашивается на собеседованиях плюс хорошо бы каждый раз иметь доступ к коду алгоритма из головы, а не выводить его из своих представлений. Как правило, на момент воспроизведения алгоритма я помню его идею, суть и могу рассказать кому-то, о чем он и что происходит. Но вот именно написать псевдокод - с этим проблема, всплывают всякие мелкие ошибки и неточности - индексы там всякие и т.п.

Приведу пример - например, сортировка массива пузырьком. Описание из википедии вот такое -
Алгоритм состоит из повторяющихся проходов по сортируемому массиву. За каждый проход элементы последовательно сравниваются попарно и, если порядок в паре неверный, выполняется обмен элементов. Проходы по массиву повторяются N-1 раз или до тех пор, пока на очередном проходе не окажется, что обмены больше не нужны, что означает — массив отсортирован. При каждом проходе алгоритма по внутреннему циклу, очередной наибольший элемент массива ставится на своё место в конце массива рядом с предыдущим «наибольшим элементом», а наименьший элемент перемещается на одну позицию к началу массива («всплывает» до нужной позиции, как пузырёк в воде. Отсюда и название алгоритма).

Псевдокод, который нужно воспроизвести точно:

ЦИКЛ ДЛЯ J=1 ДО N-1 ШАГ 1
F=0
ЦИКЛ ДЛЯ I=1 ДО N-J ШАГ 1
ЕСЛИ A[I] > A[I+1] ТО ОБМЕН A[I],A[I+1] и F=1
СЛЕДУЮЩЕЕ I
ЕСЛИ F=0 ТО ВЫХОД ИЗ ЦИКЛА
СЛЕДУЮЩЕЕ J

Соответственно, структурно он выглядит простым - можно подобрать образы для Цикла и для Если, но это можно и банально запомнить.
Гораздо важнее - переменные, по которым происходит цикл и все эти N-J, во многих алгоритмах там N-J+1 или N-J-K+1, нечто подобное - и вот с этим проблема, получается, что мне на образ цикла, который всюду повторяется, надо крепить его параметры - от 0 он или от 1 или от K и до чего. Кроме того, мне не совсем ясно, как на образах отображать структуру - что первое Если внутри второго цикла, а вот второе - снаружи второго, но внутри первого.
Ну и обращения к массиву - как отличать A[i] от A[i+1] и от A[i+k-1+z]?

Заранее спасибо.

Selendis

Сообщения : 3
Дата регистрации : 2016-06-19

Вернуться к началу Перейти вниз

Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения