Запоминание алгоритмов из программирования
Страница 1 из 1
Запоминание алгоритмов из программирования
Доброе время суток, уважаемый Админ. Надеюсь, моя тема будет многим полезна и она уж точно достойна того, чтобы ее в рассылку включить.
Суть в том, чтобы запоминать точный вариант написания кода(или псевдокода) для алгоритмов в программировании.
У вас ранее была интересная статья о запоминании основ языка программирования и она многое упрощает. Но в программировании есть также набор идиом, которые неплохо бы знать специалисту. И если написание простого цикла или перебор и поиск в массиве - это примитивный код в 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]?
Заранее спасибо.
Суть в том, чтобы запоминать точный вариант написания кода(или псевдокода) для алгоритмов в программировании.
У вас ранее была интересная статья о запоминании основ языка программирования и она многое упрощает. Но в программировании есть также набор идиом, которые неплохо бы знать специалисту. И если написание простого цикла или перебор и поиск в массиве - это примитивный код в 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
Похожие темы
» Запоминание текстовой информации
» Запоминание 60 цифр за 27 секунд
» Запоминание формул для кубика Рубика
» Запоминание 80 цифр за 37 секунд. Быстрее Бориса Конрада
» Система теней VS Метод инверсии VS Компас (запоминание игральных карт)
» Запоминание 60 цифр за 27 секунд
» Запоминание формул для кубика Рубика
» Запоминание 80 цифр за 37 секунд. Быстрее Бориса Конрада
» Система теней VS Метод инверсии VS Компас (запоминание игральных карт)
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|
Пн Апр 24, 2023 5:43 pm автор flynt
» Мнемотехника для вузовской математики
Ср Сен 21, 2022 3:16 pm автор aab137
» Запоминание текстовой информации
Ср Авг 31, 2022 4:24 pm автор maxrey
» Тактика запоминания
Сб Сен 11, 2021 11:42 pm автор Admin
» мозгомерка
Сб Авг 28, 2021 5:04 pm автор Сергей
» Осознанные сновидения
Вс Июл 11, 2021 10:09 pm автор Ferrydriver
» Мой опыт использования ноотропов
Чт Авг 23, 2018 3:39 pm автор Александр Троицкий
» Как вам такое приложение на андроиде по системе Джордано?
Вс Авг 05, 2018 3:48 pm автор sordna
» Memory Tester мобильное приложение, есть ли?
Пт Июн 15, 2018 4:04 pm автор Rolo