¿Cuál es una buena forma común de expresar diccionarios (= mapas) en pseudocódigo? Es decir, las estructuras de datos que básicamente permiten almacenar valores para las claves, iterar sobre todos los pares clave / valor, probar la inclusión de una clave determinada, etc. Tengo algo como lo siguiente (en este caso sin sentido) código Python en mente:
D = {}
D[1] = 2
for key, value in D.items():
# do something with key and value
if key in D:
# do something
Y quiero expresarlo como pseudocódigo en una publicación. Pensando matemáticamente, los diccionarios son funciones, las relaciones son conjuntos de pares, por lo que escribir algo como
D ← ∅
D[1] ← 2
for all (k, v) ∈ D
en realidad tendría sentido. ¿Pero es comprensible? Y para la prueba, usaría
if k ∈ keys(D)
¿O es más seguro ser más literal, por ejemplo
D ← empty dictionary
for all key-value pairs (k, v) in D
¿Existe alguna buena práctica / alguna referencia sobre cómo escribir un pseudocódigo comúnmente comprensible?
fuente
Respuestas:
Parece que ya está utilizando algunos de los conceptos de Corwin, Leiserson, Rivest y Stein , que siempre he visto como el texto introductorio "predeterminado" para los algoritmos, al escribir su pseudocódigo. No creo que haya más referencia estándar para el pseudocódigo.
Sin embargo, diría que lo que hace un buen pseudocódigo es dividir el problema en sus funciones matemáticas y lógicas representativas. ¿Qué condiciones tienen que ser ciertas para ejecutar el código? ¿Qué ramas existen? ¿Qué datos son realmente esenciales para determinar el comportamiento?
Más allá de eso, el objetivo del buen pseudocódigo es decirle al programador lo que hay que hacer, y no necesariamente cómo implementarlo. Es posible que desee, por ejemplo, aplanar algo como bucles anidados en una sola declaración:
probablemente sería mejor que decir
ya que este último ya comienza a hacer algunas suposiciones sobre el lenguaje que se está utilizando (mayor-fila versus mayor-columna, etc.).
fuente
Creo que depende del contexto de la publicación, el público al que va dirigido y cuán "común" necesita ser "comúnmente comprensible". Creo que su última opción es probablemente la más segura, es decir, sea lo más literal / explícito y lo más cercano posible al "inglés simple". Pero si su público objetivo está familiarizado con la teoría de conjuntos, o Python, o Java, o C #, o JavaScript, etc., entonces una notación similar a una de esas podría ser mejor.
Hago esta sugerencia como alguien que realiza entrevistas de trabajo donde se espera que el candidato escriba código o seudocódigo. La mayoría de los candidatos (tanto buenos como malos) tienden a derivar hacia el lenguaje con el que están más familiarizados para que su pseudocódigo sea lo más comprensible posible para ellos y para mí. Las personas familiarizadas con Java escriben
Map<K,V>
. Las personas familiarizadas con Python escriben tuplas o un diccionario como lo hizo en su primer fragmento de código. Las personas familiarizadas con C escriben matrices. Las personas con menos experiencia en programación tienden a escribir pseudocódigo que se parece más a un inglés simple, pero que a menudo termina pareciéndose a Python. :-)Lamentablemente, no puedo responder a su última pregunta: no estoy familiarizado con ninguna referencia o recomendación común para escribir pseudocódigo.
fuente