2010-02-20 3 views
23

мне нужно перевести некоторые питон и Java подпрограмм в псевдо код для моей магистерской работы, но есть проблема, придумывая синтаксис/стиль, который:Стандарты для псевдокода?

  • последовательного
  • легко понять
  • не слишком многословных
  • не слишком близко к естественному языку
  • не слишком близко к конкретному языку программирования.

Как вы пишете псевдокод? Существуют ли какие-либо стандартные рекомендации?

ответ

14

Я рекомендую посмотреть книгу «Введение в алгоритмы» (Cormen, Leiserson и Rivest). Я всегда находил, что его псевдокодовые описания алгоритмов очень четкие и последовательные.

Пример:

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) 
+0

Он требует отличного уровня абстракции от реального кода, но да - я думаю, это то, что мне нужно. Благодарю. – ferdystschenko

+0

@ferdystschenko: да, но псевдокод - это абстракция, скрывающая ненужные детали. В приведенном выше примере строка 6 говорит, что u будет унифицирована на S, каково это, как это реализовано? –

+2

Чтобы подробно остановиться на Эли Бендерском: детали не только не связаны с деталями, но и потому, что это псевдокод, вы даже не знаете, как это реализовано! –

4

Если код является процедурным, нормальный псевдокод, вероятно, легко (Wikipedia есть некоторые примеры).

Объектно-ориентированный псевдокод может быть сложнее. Рассмотрим:

  • с помощью диаграмм классов UML для описания классов/Наследование
  • с помощью диаграмм последовательности UML, чтобы изобразить последовательность кода
+0

Это в основном процедурный, но вы правы в использовании UML для OO. Спасибо за подсказку. – ferdystschenko

5

Я предлагаю вам взглянуть на Fortress Programming Language.

Это язык программирования фактическая и не псевдокод, но он был разработан, чтобы быть как можно ближе к исполняемому псевдокоду, как это возможно. В частности, для разработки синтаксиса они читали и анализировали сотни CS и математические статьи, курсы, книги и журналы, чтобы найти общие шаблоны использования для псевдокода и других вычислительных/математических обозначений.

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

Настоящий код пример кода крепости от NAS (NASA Advanced Supercomputing) Conjugate Gradient Parallel Benchmark. Для забавного опыта сравните спецификацию контрольного показателя с реализацией в крепости и обратите внимание на то, что существует почти соответствие 1: 1. Также сравните реализацию на нескольких других языках, таких как C или Fortran, и обратите внимание на то, как они абсолютно не связаны со спецификацией (а также часто на порядок больше, чем спецификация).

Я должен подчеркнуть: это не псевдокод, это фактический рабочий код крепости! Fortress Code Example http://ProjectFortress.Sun.Com/Projects/Community/raw-attachment/wiki/FortressQuestions/NAS-CG.png

Редактировать: над кодом Пример ссылки мертв.Вероятно, аналогичный пример можно найти здесь: https://umbilicus.wordpress.com/2009/10/16/fortress-parallel-by-default/

+4

Мне смешно, что вы считаете, что это простой и понятный синтаксис. В чем разница между: = и =? Действует ли индекс «max» как оператор или это просто обозначение? Псевдокод должен быть чем-то, что вы можете объяснить неспециалисту. –

3

Я не понимаю ваших требований «не слишком близко к конкретному языку программирования».

Python обычно считается хорошим кандидатом для написания псевдокода. Возможно, немного упрощенная версия python будет работать для вас.

+1

Я вообще согласен, хотя я думаю, что у python есть некоторые вещи, которые могут быть неразумно понятными для тех, кто не знает языка. Одним из примеров является обозначение списков, словарей и кортежей, т. Е. «{}» Вполне может быть принято как пустой массив, а не структура отображения. – ferdystschenko

2

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

У меня есть (о, я не знаю, 10, может быть, книги на полке, которые конкретно определяют эту теорию).

Python, как и предполагалось, может быть хорошим кодом, но он также может быть нечитаемым, что это чудо само по себе. Старые языки сложнее сделать нечитаемыми - их «проще» (с осторожностью), чем сегодняшние. Возможно, им будет сложнее понять, что происходит, но легче читать (для понимания того, что делает программа, требуется меньше синтаксических/языковых функций).

7

Отвечая на мой вопрос, я просто хотел обратить внимание на следующую веб-страницу о наборе псевдо-кода в LaTeX: http://www.tex.ac.uk/cgi-bin/texfaq2html?label=algorithms. Они описывают несколько разных стилей, перечисляя преимущества и недостатки. Наверное, существует, по-видимому, две таблицы стилей для написания псевдокода в способе, который используется Cormen в «Introductin to Algorithms», как было рекомендовано выше: newalg и clrscode. Последний был написан самим Корменом.

+0

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

Смежные вопросы