Qual é uma maneira comum e boa de expressar dicionários (= mapas) no pseudocódigo? Ou seja, estruturas de dados que basicamente permitem armazenar valores para chaves, iterar sobre todos os pares chave / valor, testar a inclusão de uma determinada chave etc. Eu tenho algo parecido com o seguinte código Python (neste caso sem sentido) em mente:
D = {}
D[1] = 2
for key, value in D.items():
# do something with key and value
if key in D:
# do something
E quero expressá-lo como pseudocódigo em uma publicação. Pensando matematicamente, dicionários são funções, relações são conjuntos de pares, portanto, escrever algo como
D ← ∅
D[1] ← 2
for all (k, v) ∈ D
realmente faria sentido. Mas é compreensível? E para o teste, eu usaria
if k ∈ keys(D)
Ou é mais seguro ser mais literal, por exemplo
D ← empty dictionary
for all key-value pairs (k, v) in D
Existe uma boa prática existente / alguma referência sobre como escrever pseudocódigo comumente compreensível?
algorithms
publications
Jan Pöschko
fonte
fonte
Respostas:
Parece que você já está usando alguns dos conceitos de Corwin, Leiserson, Rivest e Stein , que eu sempre vi como o texto introdutório "padrão" para algoritmos, ao escrever seu pseudocódigo. Acho que não há mais nenhuma referência padrão para pseudocódigo.
No entanto, eu argumentaria que o que faz um bom pseudocódigo é dividir o problema em suas funções matemáticas e lógicas representativas. Quais condições devem ser verdadeiras para executar o código? Quais ramos existem? Quais dados são realmente essenciais para determinar o comportamento?
Além disso, o objetivo de um bom pseudocódigo é dizer ao programador o que precisa ser feito - e não necessariamente como implementá-lo. Você pode, por exemplo, achatar algo como loops aninhados em uma única instrução:
provavelmente seria melhor do que dizer
já que o último já começa a fazer algumas suposições sobre o idioma que está sendo usado (linha maior versus coluna maior etc.).
fonte
Eu acho que depende do contexto da publicação, do público-alvo e de quão "comum" você precisa "ser compreensível" para ser. Eu acho que sua última opção é provavelmente a mais segura, ou seja, seja o mais literal / explícita e o mais próximo possível do "inglês comum". Mas se o seu público-alvo tiver familiaridade com a teoria dos conjuntos, ou Python, ou Java, ou C #, ou JavaScript, etc., uma notação semelhante a uma delas pode ser melhor.
Faço essa sugestão como alguém que conduz entrevistas de emprego em que se espera que o candidato escreva código ou pseudocódigo. A maioria dos candidatos (bons e ruins) tende a mudar para o idioma com o qual estão mais familiarizados, a fim de tornar seu pseudocódigo o mais compreensível possível para eles e para mim. Pessoas familiarizadas com Java escrevem
Map<K,V>
. Pessoas familiarizadas com o Python escrevem tuplas ou um dicionário, como você fez no seu primeiro trecho de código. Pessoas familiarizadas com C escrevem matrizes. Pessoas com menos experiência em programação tendem a escrever pseudocódigo que se parece mais com o inglês comum - mas que geralmente acaba parecendo o Python. :-)Infelizmente, não consigo responder à sua última pergunta - não estou familiarizado com nenhuma referência ou recomendação comum para escrever pseudocódigo.
fonte