Anche se lo pseudo-codice sembra più vicino al codice di un algoritmo, in pratica, lo pseudo-codice è meno formale ed è una descrizione di livello più alto. Ad esempio, puoi descrivere un computer che gioca a scacchi come uno pseudo-codice come questo:
- posiziona i pezzi iniziali nelle loro posizioni
- mostra scheda
- mentre il gioco non è finito
- metti mossa e tabellone
- richiama l'utente per lo spostamento
- muovere gli utenti
Sì, questo è pseudocodice, è utile come buon punto di partenza, ma sorvola molti dettagli. Non tiene conto delle difficoltà e delle varianti di implementazione, ma il più grande vantaggio è che consente di concettualizzare l'intera situazione senza dover risolvere tutti i dettagli.
Puoi modificarlo aggiungendo un altro livello in questo modo:
- posiziona i pezzi iniziali nelle loro posizioni
- mostra scheda
- mentre il board non è scacco matto o pareggio
- crea un elenco delle mosse legali di White
- scegli il migliore in base ad alcuni criteri
- effettua quella mossa e calcola la scacchiera risultante
- controlla se si è verificato lo scacco matto o il pareggio
- tabellone
- crea un elenco di mosse legali del nero
- richiama l'utente per lo spostamento legale per l'input
- effettua quella mossa e calcola la scacchiera risultante
- controlla se si è verificato lo scacco matto o il pareggio
- tabellone
Ora puoi scrivere lo pseudocodice per ciascuno dei passaggi principali come "fai un elenco delle mosse legali del nero", in questo modo:
- per ogni pezzo nero
- per tipo di pezzo in una determinata posizione
- crea un elenco delle prossime posizioni possibili
Ora puoi vedere che la potenza dello pseudocodice è davvero nella sua capacità di mostrare l'intera situazione in un colpo solo e quindi di permetterti di descrivere i dettagli pezzo per pezzo.
Il punto debole è che qualsiasi passaggio non è un passaggio semplice e definito.
Un algoritmo in genere acquisisce uno di questi passaggi e dettaglia le varie strutture di dati in un linguaggio simbolico in modo da poter raggiungere in modo efficiente l'obiettivo del passaggio.
Ad esempio, get_legal_moves(board, color)
è degno di un design algoritmo:
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:....
Puoi vedere che l'algoritmo deve essere molto preciso per essere utile.
Garantisce diverse cose: che gli obiettivi saranno raggiunti senza errori, prima di tutto. I passaggi sono molto dettagliati ed eseguibili in modo meccanizzato e così
i passaggi sono abbastanza piccoli da poterli riordinare per aumentare l'efficienza
(velocità) con cui hai terminato l'operazione.