Хотя псевдокод кажется ближе к коду, чем к алгоритму, на практике псевдокод менее формален и представляет собой описание более высокого уровня. Например, вы можете описать шахматный компьютер как псевдокод:
- разместить начальные части в их местах
- показать доску
- пока игра не окончена
- сделать ход и выставить доску
- предложить пользователю перейти
- заставить пользователей двигаться
Да, это псевдокод, он полезен в качестве хорошей отправной точки, но затеняет многие детали. Он не учитывает сложности и различия в реализации, но самое большое преимущество заключается в том, что он позволяет вам осмыслить всю ситуацию без необходимости разбираться со всеми деталями.
Вы можете пересмотреть его, добавив еще один уровень так:
- разместить начальные части в их местах
- показать доску
- в то время как доска не мат или ничья
- составить список легальных ходов белых
- выбрать лучшее по некоторым критериям
- сделать этот ход и вычислить полученную доску
- посмотреть, если произошел мат или ничья
- табло
- составить список ходов черных
- запрашивать у пользователя законный ход для ввода
- сделать этот ход и вычислить полученную доску
- посмотреть, если произошел мат или ничья
- табло
Теперь вы можете написать псевдокод для каждого из основных шагов, таких как «составить список легальных ходов черных», например:
- за каждую черную фигуру
- для типа части в данном месте
- составить список следующих возможных мест
Теперь вы можете видеть, что мощь псевдокода действительно заключается в его способности показать всю ситуацию за один раз, а затем позволяет вам обращаться к деталям по частям. Слабость в том, что любой шаг не является определенным простым шагом.
Алгоритм обычно выбирает один из этих шагов и детализирует различные структуры данных на символическом языке, чтобы вы могли эффективно достичь цели этого шага.
Например, get_legal_moves(board, color)
достоин разработки алгоритма:
get_legal_moves(board, color):
for i,j in board_dimensions
if piece_at i,j is of color
if piece type is KNIGHT
add the following to the next moves list:
location i+1 j+2, i-1 j+2... etc
if piece type is rook
add locations:....
Вы можете видеть, что алгоритм должен быть очень точным, чтобы быть полезным.
Это гарантирует несколько вещей: что цели будут достигнуты без ошибок, в первую очередь. Шаги очень подробны и выполняются механизированным способом, и эти шаги достаточно малы, чтобы вы могли изменить их порядок, чтобы повысить эффективность (скорость), с которой вы завершаете задачу.