Речь идет о том, как эффективно мы можем выразить алгоритм под рукой. Мне нужно это для моего обучения студентов.
Я понимаю, что нет такой вещи, как стандартный способ написания псевдокода. Разные авторы следуют различным соглашениям.
Было бы полезно, если бы люди указывали на то, как они следуют и считают лучшим.
Есть ли книга, которая имеет дело с этим в деталях?
Ответы:
Написание псевдокода похоже на написание кода: не очень важно, какой стандарт вы соблюдаете, если вы (и люди, с которыми вы пишете) действительно следует некоторому стандарту.
Но для справки, вот особенный стандарт, который я использую в своих конспектах лекций, исследовательских работах и будущих книгах.
Используйте стандартный императивный синтаксис для потока управления и доступа к памяти - если, пока, для, return, array [index], function (arguments). Разобрать "еще, если".
record.field
record->field
x*y
a%b
s <= t
!p
sqrt(x)
PI
MAX_INT
Но используйте для назначения, чтобы избежать проблемы.x←y
==
Но избегайте обозначений (и псевдокодов!) Полностью, если английский понятнее.
Минимизируйте синтаксический сахар - укажите блочную структуру с помощью последовательного отступа (как на Python). Пропустите сладкие ключевые слова, такие как «начало / конец» или «do / od» или «fi». Опустить номера строк. Вы не подчеркнуть ключевые слова , как «за» или «а» или «если», установив их в другой
typeface
или стиле . Когда-либо. Просто не надо.Но набирайте имена алгоритмов и константы в \ textc {Small Caps}, имена переменных в курсиве и буквенные строки в sans serif.
Но добавьте небольшое количество вертикального «дышащего» пространства (
\\[0.5ex]
) между значимыми кусками кода.Не указывайте неважные детали. Если не имеет значения, в каком порядке вы посещаете вершины, просто скажите «для всех вершин».
Например, вот рекурсивная формулировка алгоритма минимального связующего дерева Боровки . Ранее я определил как график, полученный из G путем сжатия всех ребер в множестве L , и Flatten как подпрограмму, которая удаляет петли и параллельные ребра.G/L G L
Я использую свою собственную облегченную
algorithm
среду LaTeX для набора псевдокода. (Это простоtabbing
среда внутри\fbox
.) Вот мой исходный код для алгоритма Боровки:источник
Я склонен использовать что-то похожее на синтаксис Python. Python уже достаточно близок к псевдокоду, и в некоторых случаях мой псевдокод может превратиться в реальный рабочий код.
источник
Если вы хотите иметь определенный код (т. Е. Практически без математики, близкий к реальному программированию), вы можете подумать о том, чтобы иметь код, который фактически компилируется. Это имеет несколько преимуществ:
Профессор в моем университете делает это в своем курсе алгоритмов. Его язык выбора - Модула. Я не думаю, что конкретный выбор языка имеет значение, хотя. Просто придерживайтесь одного (на каждую парадигму), которое наилучшим образом соответствует вашему уровню абстракции.
источник