Псевдокод из какого-то учебного пособия Массачусетского технологического института
-
07-07-2019 - |
Вопрос
У меня никогда не было особой потребности в написании большого количества формального псевдокода, но необходимость возникла, поэтому я подумал, что выберу некоторые стандарты, чтобы оставаться последовательным во всем коде.
С этой целью я подобрал несколько учебных видеороликов "iTunes U", среди прочего, 6.046J / 18.410J Введение в алгоритмы (SMA 5503).
В самом первом видеозаписи лекции лектор пишет "Сортировка вставки" на доске, и он пишет это:
Insertion-Sort(A, N) // Sorts A[1..n]
for j ← 2 to n
do key ← A[j]
i ← j-1
while i > 0 and A[i] > key
do A[i+1] ← A[i]
i ← i-1
A[i+1] ← key
Итак, мои вопросы:
- Почему
i ← j-1
когдаA[i+1] = key
?То есть, почему←
в некоторых случаях, и=
в другом?Обратите внимание, что в приведенном выше коде←
используется и для последнего, но в раздаточных материалах, доступных в Интернете,=
используется, это просто опечатка?(Я предполагаю, что да) - Что еще более важно, почему
do key ← A[j]
когдаi ← j-1
?Что такого особенного, что для этого требуетсяdo
такая команда и отступ?
Другими словами, почему приведенный выше псевдокод не написан подобным образом (с моими основными моментами):
Insertion-Sort(A, N) // Sorts A[1..n]
for j ← 2 to n
key ← A[j] <-- lost the do here
i ← j-1 <-- no indentation
while i > 0 and A[i] > key
A[i+1] ← A[i] <-- lost the do here
i ← i-1 <-- no indentation
A[i+1] ← key
Последний вопрос:Есть ли у кого-нибудь стандартный код для псевдокода где-нибудь пригодится?Моя главная цель - последовательность, так что мне нужно "научить" получателей только один раз.
Решение
Структурированный английский это "стандартизированный" язык псевдокода.
Другие советы
стрелка служит как = в обычном коде.
знак равенства в псевдо-коде используется как == в обычном коде
итак j <- 1
подлый j = 1
и j = 1
подлый if( j == 1)