Стандарты для псевдо-кода?
Мне нужно перевести некоторые подпрограммы python и java в псевдо-код для моей магистерской диссертации, но у меня проблемы с синтаксисом / стилем, который:
- последовательный
- легко понять
- не слишком многословен
- не слишком близко к естественного языка
- не слишком близко к какому-то конкретному языку программирования.
Как вы пишете псевдо-код? Существуют ли какие-либо стандартные рекомендации?
6 ответов
Я рекомендую посмотреть книгу "введение в алгоритмы" (Кормен, Лейзерсон и Ривест). Я всегда находил его псевдокодовое описание алгоритмов очень четким и последовательным.
пример:
DIJKSTRA(G, w, s)
1 INITIALIZE-SINGLE-SOURCE(G, s)
2 S ← Ø
3 Q ← V[G]
4 while Q ≠ Ø
5 do u ← EXTRACT-MIN(Q)
6 S ← S ∪{u}
7 for each vertex v ∈ Adj[u]
8 do RELAX(u, v, w)
отвечая на мой собственный вопрос, я просто хотел обратить внимание на следующую веб-страницу о наборе псевдо-кода в LaTeX:http://www.tex.ac.uk/cgi-bin/texfaq2html?label=algorithms. Они описывают несколько различных стилей, перечисляя преимущества и недостатки. Кстати, существуют две таблицы стилей для написания псевдо-кода способом, используемым в" введении в алгоритмы " Корменом, как рекомендовано выше: newalg и clrscode. Последний был написан Корменом себя.
Я предлагаю вам взглянуть на Язык Программирования Fortress.
Это фактический язык программирования, и не псевдокод, но он был разработан как можно ближе к исполняемому псевдокоду. В частности, для разработки синтаксиса они читают и анализируют сотни CS и математические статьи, курсы, книги и журналы, чтобы найти общие шаблоны использования для псевдокода и других вычислительных / математических нотации.
вы можете использовать все эти исследования, просто глядя на исходный код Fortress и абстрагируясь от вещей, которые вам не нужны, так как ваша целевая аудитория-человек, тогда как Fortress-компилятор.
здесь фактический пример запуска кода крепости из NAS (NASA Advanced Supercomputing) сопряженный градиент параллельный бенчмарк. Для удовольствия сравните спецификация эталона с реализация в крепости и обратите внимание, как есть почти 1: 1 соответствие. Также сравните реализацию на нескольких других языках, таких как C или Fortran, и обратите внимание, что они не имеют абсолютно никакого отношения к спецификации (а также часто на порядок длиннее спецификации).
Я должен подчеркнуть: это не псевдокод, это фактический рабочий код крепости!Пример Кода Крепости http://ProjectFortress.Sun.Com/Projects/Community/raw-attachment/wiki/FortressQuestions/NAS-CG.png
Edit: выше пример кода ссылка мертва. Возможно, аналогичный пример можно найти здесь: https://umbilicus.wordpress.com/2009/10/16/fortress-parallel-by-default/
Если код процедурный, обычный псевдокод, вероятно, прост (Википедия имеет несколько примеров).
объектно-ориентированный псевдокод может быть сложнее. Подумайте:
- использование диаграмм классов UML для отображения классов / наследования
- использование диаграмм последовательности UML для отображения последовательности кода
Я не понимаю ваше требование "не слишком близко к какому-то конкретному языку программирования".
Python обычно рассматривается как хороший кандидат для написания псевдо-кода. Возможно, немного упрощенная версия python будет работать для вас.
Паскаль всегда был традиционно наиболее похож на псевдокод, когда дело доходит до математических и технических областях. Не знаю почему, но так было всегда.
У меня есть некоторые (О, я не знаю, может быть, 10 книг на полке, какие конкретно этой теории).
Python, как было предложено, может быть хорошим кодом, но он также может быть настолько нечитаемым, что это само по себе удивительно. Старые языки труднее сделать нечитаемыми - они "проще" (возьмите с осторожностью), чем сегодня одни. Возможно, им будет сложнее понять, что происходит, но легче читать (для понимания того, что делает программа, требуется меньше синтаксических/языковых функций).