51 votos

Hay diccionarios en matemáticas?

Considere el siguiente diccionario en el lenguaje de programación Python:

D = {'A': 1, 'B': 2, 'C': 3}

Es decir que el valor de a es 1, el valor de B es 2, y el valor de C es 3. También tiene la propiedad de que D['A'] = 1 etc.

Cómo iba yo a escribir tal cosa en matemáticas? Yo estaba pensando en

$$D = \{A = 1, B = 2, C = 3\}.$$

However, I am not sure if this is the right or best way to do such thing.

I would like to use the structure for taking sums: e.g. 'AAAA' is interpreted as $1+1+1+1$ etc. ¿Qué tipo de notación debo usar?

106voto

par Puntos 5570

Un diccionario es sólo una función $\mathrm{Dict}\colon \mathrm{Keys} \rightarrow \mathrm{Values}\cup\{\epsilon\}$ donde $\epsilon$ es un "carácter nulo" con el entendimiento de que $\epsilon\notin\mathrm{Values}$.

Por ejemplo, supongamos $\mathrm{Keys}=\{A,B,C,...,Z\}$, e $\mathrm{Values}=\mathbb{Z}$. A continuación, en su caso,

$$ \mathrm{Dict}(x)=\begin{cases} 1 & \text{if }x=A\\ 2 & \text{if }x=B\\ 3 & \text{if }x=C\\ \epsilon & \text{otherwise} \end{casos} $$

16voto

Un estándar de Python dict corresponde a una función $f\colon K\to U$ en matemáticas, donde $U$ es el conjunto de todos los posibles objetos de Python o valores de tipos integrados, y $K$ es un subconjunto finito de $U$. I. e., para algunas conjunto finito $K$ de las claves se asocia a cada tecla de un arbitrario (Python) valor. Cuando se trata de evaluar un dict sobre un valor que no está en $K$, KeyError es elevada. Esto corresponde al hecho de que en las matemáticas no se puede pedir el valor de $f$ en algo que no es un miembro de $K$.

(Tenga en cuenta que Python, None es un objeto de primera clase/valor a diferencia null en C o Java. Tal vez los programadores de C++ puede pensar en él como un verdadero objeto inmutable que se encuentra realmente en la posición de memoria especificada por el puntero NULL=0. Por lo null es la dirección de la None. Yo sólo menciono esto porque el aceptado responder por el par parece estar confundidos acerca de este punto. Que no quede claro si $\epsilon$ se supone que el modelo de None o KeyError. De cualquier manera algo está mal o, al menos, confuso.)

Para el ejemplo concreto diccionario D, podemos definir a la $f\colon \{A,B,C\} \to U$ mediante el establecimiento de $f(A)=1$, $f(B)=2$ y $f(C)=3$. La notación AAAA no parece muy útil para mí, excepto como un acceso directo en casos más específicos. En matemáticas que iba a escribir esto como $f(A) + f(A) + f(A) + f(A)$. Por supuesto, esto sólo tiene sentido si $f(A)$ es algo que $+$ está definido.

9voto

CodeMonkey1313 Puntos 4754

Agregar a @par 's una excelente respuesta para abordar la segunda parte de la pregunta:

Me gustaría utilizar la estructura para la toma de sumas: por ejemplo, 'AAAA' es interpretado como 1+1+1+1 etc. ¿Qué tipo de notación debo usar?

En su caso, las Claves son los caracteres que desee pensar en como Cadenas de caracteres que tiene longitud 1. Las Cuerdas tienen un natural asociativa de la operación de concatenación. (En muchos idiomas, incluso se escriben con un signo+, aunque no es conmutativa.) Los números enteros están equipadas con un asociativa +. Entonces lo que quiero es que la afirmación de que Dict respeta las operaciones: Dict(X+Y) debe ser igual a Dict(X)+Dict(Y). Hay vocabulario de matemáticas para que: Dict es un semigroup homomorphism.

Que permite extender Dict desde el set de una de las Cadenas de caracteres para el semigroup de todos finito de Cadenas.

Si de hecho eso es lo que va a hacer que usted no debe llamar a su función de "Dict". Considerar algo como "Hash" (ya que no asigna un entero a una cadena). Enterrar el diccionario que da el valor de la función de hash sobre los caracteres individuales de forma privada dentro de la definición de un objeto de Python Hash. A continuación, calcular Hash.value(s) con un bucle por los personajes en s, buscando sus valores en el diccionario y sumar.

8voto

Rod Puntos 11

Mientras que a la par de la respuesta es, esencialmente, el derecho de respuesta, aún hay algunos problemas más sutiles:

Un "tipo de diccionario" es un tipo de datos abstracto. Una instancia (básicamente un elemento) de que tipo es, literalmente, una función como la que se describe par. Pero el "diccionario de tipo" viene con un montón de operaciones que se pueden hacer con sus miembros, por ejemplo:

  • la adición de un par de $(k, v)$ al diccionario
  • quitando un par de $(k,v)$ desde el diccionario
  • cambiando el valor de $v$ que la clave de la $k$ se asigna a
  • encontrar el valor de $v$ que la clave de la $k$ se asigna a

y es posible más o menos (según su definición). Estas operaciones forman parte de la definición de un tipo de datos abstracto. Las matemáticas puras a menudo no trata directamente con la computabilidad o la rapidez con que algo se puede calcular, pero (teórico) ciencias de la computación.

Cualquier abstraído tipo de datos puede ser implementada por numerosas estructuras de datos diferentes, que difieren en los algoritmos que utilizan para ejecutar estas operaciones, cómo se almacenan los datos, etc. . Nada de esto (directamente) las materias de matemática abstracta "de la función".

Otra cosa a tener en cuenta es que los miembros de un tipo en un lenguaje de programación comúnmente son mutables, es decir pueden ser "cambiado a lo largo del tiempo". Esta es una característica que normalmente no nos tienen en las matemáticas puras, las cosas no cambian en el tiempo. Hay varias maneras de lidiar con eso: Uno es insistir en que el diccionario tiene que ser inmutable y de que las operaciones de rendimiento de los nuevos diccionarios. Otra forma es pensar en un diccionario como una secuencia de funciones, donde los valores de la secuencia son ciertas instancias del diccionario a través del tiempo.

Un más sofisticado método utiliza un tipo diferente de la lógica (aparte de la lī ogica), por ejemplo, la lógica temporal.

Una última cuestión: estoy totalmente ignorado por otros efectos secundarios como las excepciones que el diccionario de Python puede tirar. Escucho esto puede ser modelado por computadora (científicos) mónadas.

4voto

celtschk Puntos 13058

Un diccionario es una función parcial de la tecla de espacio $K$ a del espacio de valor $V$ donde $K$ es el conjunto de todos los hashable objetos, y $V$ es el conjunto de todos los objetos de Python.

Una función parcial de $K$ $V$es un subconjunto de a $K\times V$ con la condición de que para cada una de las $k\in K$ contiene a lo más un par que ha $k$ como primer elemento. La diferencia de una función es una función debe tener exactamente un par con $k$ como primer elemento.

$K\times V$ es el conjunto de pares $(k,v)$$k\in K$$v\in V$.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X