En representación de código algebraico

votos
5

Tengo una serie de pequeños algoritmos que me gustaría escribir en un papel. Son relativamente corto, y conciso. Sin embargo, en lugar de escribirlos en pseudo-código (a la Cormen o incluso Knuth), me gustaría escribir una representación algebraica de ellos (más lineal y una mejor reproducción de látex). Sin embargo, no puedo encontrar recursos para la mejor notación para esto, si hay algo: por ejemplo, ¿cómo me represento un bucle? ¿Si? La adición de una tupla a una lista?

cualquiera de ustedes ha encontrado con este problema, y ​​de alguna manera resuelto?

Gracias.

EDITAR : Gracias, la gente. Creo que hice un buen trabajo al formular la pregunta. Aquí va otra vez, esperando que sea más claro: ¿qué es la notación común para hablar acerca de los bucles y cláusulas si-entonces en una notación matemática? Por ejemplo, puedo usar $acc \leftarrow acc \cup \langle i,i+1 \rangle$para representar el método de añadir de una lista.

Publicado el 28/01/2010 a las 20:50
fuente por usuario
En otros idiomas...                            


8 respuestas

votos
0

Algo como esto página web describe?

Respondida el 28/01/2010 a las 20:57
fuente por usuario

votos
1

Es posible echar un vistazo a Haskell. Haskell formatos bien en látex, tiene una bonita sintaxis algebraica, e incluso se puede compilar un archivo de látex con Haskell en ella, siempre que el código está envuelto en \begin{code}y \end{code}. Ver aquí: http://www.haskell.org/haskellwiki/Literate_programming . Probablemente hay herramientas de programación literaria para otros idiomas.

Respondida el 28/01/2010 a las 20:59
fuente por usuario

votos
2

Me copio Knuth. Pocos saben cómo comunicar mejor que él en un entorno informático.

Respondida el 28/01/2010 a las 21:00
fuente por usuario

votos
-1

APL ? El único problema es que pocas personas puedan leerlo.

Respondida el 28/01/2010 a las 21:00
fuente por usuario

votos
8

No haga esto. Usted se están evitando de lo que las personas esperan ver cuando leen un documento acerca de los algoritmos. Debe seguir las prácticas esperadas; sus ideas son más propensos a obtener la atención que se merecen. Cuando fueres haz lo que vieres.

Formateo de código (o pseudocódigo ya que puede ser) en un papel LaTeXed es muy fácil. Véase, por ejemplo, Formateo de código en LaTeX .

Respondida el 28/01/2010 a las 21:03
fuente por usuario

votos
1

Lisp que comenzó como una notación matemática de un modelo de computación de manera que el profesor tendría una herramienta mejor que las máquinas de Turing. Por accidente, resulta que se puede implementar en el montaje - por lo tanto Lisp, nació el lenguaje de programación.

Pero no creo que esto es realmente lo que busca ya que el modelo de computación que describe lisp no tiene bucles: recursividad se utiliza en su lugar. La sintaxis se deriva de álgebra donde los apoyos denotan evaluar-este-y-sustituto-la-resultado. De hecho, el modelo de Lisp de la informática es básicamente la sustitución - lo que esencialmente es el álgebra.

De hecho, los idiomas más funcionales como Lisp, Haskell y Erlang se derivan de las matemáticas. Haskell es en realidad el resultado de la prueba de que el cálculo lambda puede ser utilizado para implementar los sistemas de tipo. Así Haskell, como Lisp nació de la matemática pura. Pero, de nuevo, la sintaxis no es lo que probablemente sería utilizado para.

Por supuesto que puede explicar la sintaxis Lisp y Haskell para los matemáticos y que sería tratarlo como un "juego". construcciones del lenguaje como bucles, recursividad y condicionales pueden ser probados de las reglas del juego en vez de ciegamente a cabo como en otros idiomas. Esto le llevaría a los reinos de combinatronics, otra rama de las matemáticas. De hecho, en combinatronics, incluso el concepto de los números puede ser construido a partir de las reglas del juego en lugar de ser una parte natural de la lengua (Google Iglesia numerales).

Así que echar un vistazo a Lisp / Scheme, Erlang y Haskell si lo desea. Erlang tiene sobre todo la sintaxis cerca de lo que desea:

add(a,b) -> a + b

Pero mi recomendación es escribir en pseudocódigo C-similares. Es una especie de mínimo común denominador en lenguajes de programación. Tiene una sintaxis que es bastante fácil de entender y limpio. Y la sintaxis de la función, incluso deriva de funciones matemáticas. Recuerde f(x)?

Como un plus, los matemáticos se utilizan para escribir C, los estadísticos se utilizan para escribir C (aunque por lo general prefieren R), los físicos se utilizan para escribir C, los programadores se utilizan para al menos mirando C (sé que algunos que nunca han tocado C).

En realidad, tacha eso. Usted menciona que su público objetivo son los estadísticos. Escribir en R

Respondida el 28/01/2010 a las 21:47
fuente por usuario

votos
7

Veo si-expresiones en notación matemática bastante a menudo. Lo habitual para un bucle es una relación de recurrencia , o equivalentemente, una función definida de forma recursiva.

Así es como la función de Ackermann se define en Wikipedia, por ejemplo:

A (m, n) = n + 1, si m = 0;  A (m-1, 1) si m> 0 y n = 0;  y A (m-1, A (m, n-1)) si m> 0 y n> 0.

Este cuadro es agradable porque se siente matemática en sabor y, sin embargo, podría escribir con claridad en casi exactamente como está escrito y tienen una implementación. No siempre es posible lograr eso.

Otras notaciones matemáticas que corresponden a los bucles incluyen Σ-notación para la suma y la notación configuración constructor .

¡Espero que esto responda tu pregunta! Pero si su objetivo es describir cómo se hace algo y tener a alguien a entender, creo que es probablemente un error suponer que los matemáticos preferirían ver ecuaciones. No creo que sean útiles intercambiables (a pesar de Turing equivalencia). Si el algoritmo consiste en estructuras de datos mutables, código de procedimiento es probablemente va a ser mejor que las ecuaciones para explicarla.

Respondida el 29/01/2010 a las 00:21
fuente por usuario

votos
2

Un símbolo para los bucles generales no existe; por lo general va a utilizar el operador de suma . "si" se representa mediante implicaciones , y de "añadir una tupla a una lista" que utilizaría la unión .

Sin embargo , en general, un poco de nivel de detalle no es necesariamente una mala cosa - a veces, especialmente para los algoritmos complejos, lo mejor es que explicarlo en la llanura Inglés, utilizando ejemplos y diagramas. Esto es doblemente cierto para los no programadores.

Piense en esto: cuando se lee un libro de texto de matemáticas en el algoritmo de Euclides para GCD, o la criba de Eratóstenes, ¿cómo está escrito? Por lo general, el algoritmo en sí está en prosa, mientras que la prueba del algoritmo es donde los símbolos matemáticos se encuentran.

Respondida el 29/01/2010 a las 02:00
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more