diff options
| author | Juan Marín Noguera <juan.marinn@um.es> | 2020-02-20 20:21:46 +0100 |
|---|---|---|
| committer | Juan Marín Noguera <juan.marinn@um.es> | 2020-02-20 20:21:46 +0100 |
| commit | 1f7f9bcc7660fba0827a62c3068d5c7082f025d7 (patch) | |
| tree | 401c12eaea057e9eb99579c05703906cfaad156c /aed1/n2.lyx | |
| parent | c4c9556bc4a235f413edda917fdc683cd57390f7 (diff) | |
Otras dos asignaturas
Diffstat (limited to 'aed1/n2.lyx')
| -rw-r--r-- | aed1/n2.lyx | 788 |
1 files changed, 788 insertions, 0 deletions
diff --git a/aed1/n2.lyx b/aed1/n2.lyx new file mode 100644 index 0000000..26201e5 --- /dev/null +++ b/aed1/n2.lyx @@ -0,0 +1,788 @@ +#LyX 2.3 created this file. For more info see http://www.lyx.org/ +\lyxformat 544 +\begin_document +\begin_header +\save_transient_properties true +\origin unavailable +\textclass book +\use_default_options true +\maintain_unincluded_children false +\language spanish +\language_package default +\inputencoding auto +\fontencoding global +\font_roman "default" "default" +\font_sans "default" "default" +\font_typewriter "default" "default" +\font_math "auto" "auto" +\font_default_family default +\use_non_tex_fonts false +\font_sc false +\font_osf false +\font_sf_scale 100 100 +\font_tt_scale 100 100 +\use_microtype false +\use_dash_ligatures true +\graphics default +\default_output_format default +\output_sync 0 +\bibtex_command default +\index_command default +\paperfontsize default +\spacing single +\use_hyperref false +\papersize default +\use_geometry false +\use_package amsmath 1 +\use_package amssymb 1 +\use_package cancel 1 +\use_package esint 1 +\use_package mathdots 1 +\use_package mathtools 1 +\use_package mhchem 1 +\use_package stackrel 1 +\use_package stmaryrd 1 +\use_package undertilde 1 +\cite_engine basic +\cite_engine_type default +\biblio_style plain +\use_bibtopic false +\use_indices false +\paperorientation portrait +\suppress_date false +\justification true +\use_refstyle 1 +\use_minted 0 +\index Index +\shortcut idx +\color #008000 +\end_index +\secnumdepth 3 +\tocdepth 3 +\paragraph_separation indent +\paragraph_indentation default +\is_math_indent 0 +\math_numbering_side default +\quotes_style french +\dynamic_quotes 0 +\papercolumns 1 +\papersides 1 +\paperpagestyle default +\tracking_changes false +\output_changes false +\html_math_output 0 +\html_css_as_file 0 +\html_be_strict false +\end_header + +\begin_body + +\begin_layout Section +Conjuntos +\end_layout + +\begin_layout Standard +Un conjunto es una colección no ordenada de elementos distintos. + El TAD +\family sans +Conjunto[ +\begin_inset Formula $T$ +\end_inset + +] +\family default + define conjuntos finitos con elementos de un cierto tipo. + Operaciones comunes: +\end_layout + +\begin_layout Standard +\begin_inset Formula +\[ +\begin{array}{rrr} +\mathsf{Vacío}:\rightarrow C & \mathsf{Unión}:C\times C\rightarrow C & \mathsf{Intersección}:C\times C\rightarrow C\\ +\mapsto\emptyset & (a,b)\mapsto a\cup b & (a,b)\mapsto a\cap b\\ +\\ +\mathsf{Diferencia}:C\times C\rightarrow C & \mathsf{Combina}:C\times C\rightarrow C & \mathsf{Miembro}:T\times C\rightarrow B\\ +(a,b)\mapsto a\backslash b & (a,b)\rightarrow a\dot{\cup}b & (x,a)\mapsto x\in a\\ +\\ +\mathsf{Inserta}:T\times C\rightarrow C & \mathsf{Suprime}:T\times C\rightarrow C & \mathsf{Igual}:C\times C\rightarrow B\\ +(x,a)\mapsto a\cup\{x\} & (x,a)\mapsto a\backslash\{x\} & (a,b)\mapsto a=b +\end{array} +\] + +\end_inset + + +\end_layout + +\begin_layout Standard +Si además tenemos un orden total sobre +\begin_inset Formula $T$ +\end_inset + +, podemos definir +\begin_inset Formula $\mathsf{Min}:C\rightarrow T$ +\end_inset + + y +\begin_inset Formula $\mathsf{Max}:C\rightarrow T$ +\end_inset + + para conjuntos no vacíos. + Implementaciones básicas: +\end_layout + +\begin_layout Itemize + +\series bold +Tabla de booleanos +\series default +, donde cada elemento de +\family sans +T +\family default + se representa con un bit 1 si pertenece al conjunto o 0 en caso contrario. + La unión, intersección, diferencia y comprobación de igualdad son +\begin_inset Formula $O(n)$ +\end_inset + + con +\begin_inset Formula $n:=|T|$ +\end_inset + +, mientras que la inserción y eliminación y comprobación de pertenencia + son +\begin_inset Formula $O(1)$ +\end_inset + +. + Las operaciones son muy sencillas de implementar y no hace falta memoria + dinámica, pero el tamaño de un conjunto es proporcional a +\begin_inset Formula $|T|$ +\end_inset + + y por tanto solo es adecuado cuando +\begin_inset Formula $|T|$ +\end_inset + + es pequeño. +\end_layout + +\begin_layout Itemize + +\series bold +Lista de elementos +\series default +. + +\series bold + +\series default +La unión, intersección y diferencia son +\begin_inset Formula $O(mn)$ +\end_inset + + siendo +\begin_inset Formula $m$ +\end_inset + + y +\begin_inset Formula $n$ +\end_inset + + el tamaño de los conjuntos de entrada, mientras que la comprobación de + pertenencia, inserción y eliminación son +\begin_inset Formula $O(n)$ +\end_inset + +. + La comprobación de igualdad es +\begin_inset Formula $O(1)$ +\end_inset + + en el caso mejor ( +\begin_inset Formula $m\neq n$ +\end_inset + +) y +\begin_inset Formula $O(n^{2})$ +\end_inset + + en el peor. + Se usa un espacio proporcional al del conjunto representado, pero es más + complejo de implementar, y las operaciones son menos eficientes si el conjunto + es grande o +\begin_inset Formula $|T|$ +\end_inset + + es pequeño. +\end_layout + +\begin_layout Itemize +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +begin{sloppypar} +\end_layout + +\end_inset + + +\series bold +Lista de elementos ordenada +\series default +. + La unión, intersección y diferencia pasan a ser +\begin_inset Formula $O(\max\{m,n\})$ +\end_inset + + en el caso mejor y +\begin_inset Formula $O(m+n)$ +\end_inset + + en el peor, y la comprobación de igualdad en el caso peor pasa a ser +\begin_inset Formula $O(n)$ +\end_inset + +. +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +end{sloppypar} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Section +Diccionarios +\end_layout + +\begin_layout Standard +Una asociación es un par clave-valor, y un diccionario es un conjunto de + asociaciones sin más de un valor para una misma clave. + Nos limitamos a +\family sans +Diccionario[ +\begin_inset Formula $T_{k}$ +\end_inset + +, +\begin_inset Formula $T_{v}$ +\end_inset + +] +\family default +, diccionarios finitos con claves de un cierto tipo +\begin_inset Formula $T_{k}$ +\end_inset + + y valores de tipo +\begin_inset Formula $T_{v}$ +\end_inset + +. + Operaciones comunes: +\end_layout + +\begin_layout Standard +\begin_inset Formula +\[ +\begin{array}{rr} +\mathsf{Inserta}:T_{k}\times T_{v}\times D\rightarrow D & \mathsf{Consulta}:T_{k}\times D\rightarrow T_{v}\\ +(k,v,d)\overset{k\notin\text{Dom}(d)}{\mapsto}D\cup\{(k,v)\} & (k,d)\overset{k\in\text{Dom}(d)}{\mapsto}d(k)\\ +\mathsf{}\\ +\mathsf{Suprime}:T_{k}\times D\rightarrow D & \mathsf{Vacío}:\rightarrow D\\ +(k,d)\mapsto\{(a,b)\in d:a\neq k\} & \mapsto\emptyset +\end{array} +\] + +\end_inset + + +\end_layout + +\begin_layout Standard +La representación más sencilla es mediante una lista de asociaciones. +\end_layout + +\begin_layout Section +Tablas de dispersión +\end_layout + +\begin_layout Standard +Permiten una representación más eficiente de conjuntos y diccionarios mediante + una lista contigua de +\begin_inset Formula $M$ +\end_inset + + elementos y una +\series bold +función +\series default + +\series bold +\emph on +hash +\series default +\emph default + o +\series bold +de dispersión +\series default + +\begin_inset Formula $h:T\rightarrow\{0,\dots,M-1\}$ +\end_inset + +. + La idea es que, para diccionarios, +\begin_inset Formula $h$ +\end_inset + + solo dependa de la clave de la asociación, no del valor. + Se dice que +\begin_inset Formula $x\neq y\in T$ +\end_inset + + son sinónimos si +\begin_inset Formula $h(x)=h(y)$ +\end_inset + +. + Existen dos formas de dispersión: +\end_layout + +\begin_layout Itemize + +\series bold +Abierta +\series default +: Los elementos de la tabla son apuntadores a listas (enlazadas) de elementos, + llamadas +\series bold +cubetas +\series default +, que contienen los elementos +\begin_inset Formula $\{e\in c:h(e)=k\}$ +\end_inset + +, siendo +\begin_inset Formula $c$ +\end_inset + + el conjunto y +\begin_inset Formula $k$ +\end_inset + + el índice de la cubeta. +\begin_inset Newline newline +\end_inset + +El tamaño de las cubetas en un reparto uniforme (lo ideal) es +\begin_inset Formula $\frac{n}{M}$ +\end_inset + +, siendo +\begin_inset Formula $n$ +\end_inset + + el número de elementos del conjunto, luego en este caso la búsqueda es + +\begin_inset Formula $O(\frac{n}{M})$ +\end_inset + + y la inserción es +\begin_inset Formula $O(1+\frac{n}{M})$ +\end_inset + +. + El uso de memoria es el de +\begin_inset Formula $M+n$ +\end_inset + + apuntadores y +\begin_inset Formula $n$ +\end_inset + + elementos. + Así, a más cubetas las operaciones son más rápidas, pero se usa más memoria. +\end_layout + +\begin_layout Itemize + +\series bold +Cerrada +\series default +: Los elementos de la tabla son del tipo +\begin_inset Formula $T$ +\end_inset + +, y si al ir a insertar un elemento +\begin_inset Formula $e$ +\end_inset + + en el índice +\begin_inset Formula $h(e)$ +\end_inset + + este ya está ocupado se dice que ocurre una +\series bold +colisión +\series default +, y se hace una +\series bold +redispersión +\series default +: se aplican sucesivamente los elementos de una sucesión de funciones +\begin_inset Formula $(h_{n}:T\rightarrow\{0,\dots,M-1\})_{n}$ +\end_inset + + sobre +\begin_inset Formula $e$ +\end_inset + + hasta que devuelva un índice de la tabla no ocupado, donde se guarda +\begin_inset Formula $e$ +\end_inset + +. + +\begin_inset Newline newline +\end_inset + +Llamamos +\series bold +cadena +\series default + o +\series bold +secuencia de búsqueda +\series default + a la secuencia +\begin_inset Formula $h(e),h_{1}(e),\dots$ +\end_inset + + de posiciones recorridas en este proceso. + Al consultar un elemento se recorre esta secuencia hasta encontrar el elemento + o una celda vacía, que indica que este no está. + En la eliminación, para no romper la secuencia, se sustituye el elemento + por una marca de eliminado, que se trata como celda libre en la inserción + pero no en la búsqueda, o bien se mueven elementos cuya secuencia de búsqueda + pase por la posición eliminada. +\begin_inset Newline newline +\end_inset + +Como la probabilidad de colisión es +\begin_inset Formula $\frac{n}{M}$ +\end_inset + + y se ha de encontrar un elemento libre, el coste de una inserción es +\begin_inset Formula $O(\frac{1}{1-\frac{n}{M}})$ +\end_inset + +, que tiende a infinito cuando +\begin_inset Formula $n\rightarrow M$ +\end_inset + +, mientras que el de búsqueda es de +\begin_inset Formula $O(\frac{1}{1-\frac{n-1}{M}})$ +\end_inset + +. + El uso de memoria es el de +\begin_inset Formula $M$ +\end_inset + + elementos, o el de +\begin_inset Formula $M$ +\end_inset + + apuntadores más +\begin_inset Formula $n$ +\end_inset + + elementos si se decide que la tabla almacene apuntadores. +\end_layout + +\begin_layout Standard +Para evitar la pérdida de eficiencia cuando +\begin_inset Formula $n$ +\end_inset + + aumenta, la tabla se puede +\series bold +reestructurar +\series default +, creando una nueva con distinto +\begin_inset Formula $M$ +\end_inset + + y copiando los elementos, por ejemplo cuando +\begin_inset Formula $n>2M$ +\end_inset + + en dispersión abierta o cuando +\begin_inset Formula $n>\frac{3}{4}M$ +\end_inset + + en cerrada. + Para que las tablas de dispersión sean eficientes se debe usar una buena + función, que reparta los elementos de la forma más aleatoria pero a la + vez sea fácil de calcular. +\end_layout + +\begin_layout Standard +Métodos para enteros: +\end_layout + +\begin_layout Itemize + +\series bold +División +\series default +: +\begin_inset Formula $h(k):=k\mod M$ +\end_inset + +, siendo +\begin_inset Formula $M$ +\end_inset + + normalmente primo. +\end_layout + +\begin_layout Itemize + +\series bold +Multiplicación +\series default +: +\begin_inset Formula $h(k):=\lfloor Ck\rfloor\mod M,C\in\mathbb{R}$ +\end_inset + +. + +\begin_inset Newline newline +\end_inset + +Variante: +\begin_inset Formula $h(k):=\lfloor\text{d}(\frac{Ak}{W})M\rfloor,\text{mcd}(A,K)=1$ +\end_inset + +, donde +\begin_inset Formula $\text{d}(x)$ +\end_inset + + es la parte decimal de +\begin_inset Formula $x$ +\end_inset + +. +\end_layout + +\begin_layout Itemize + +\series bold +Centro del cuadrado +\series default +: +\begin_inset Formula $h(k):=\lfloor\frac{k^{2}}{C}\rfloor\mod M$ +\end_inset + +. +\end_layout + +\begin_layout Standard +Para secuencias: +\end_layout + +\begin_layout Itemize + +\series bold +Suma +\series default +: +\begin_inset Formula $h(k):=\sum_{i}x_{i}\mod M$ +\end_inset + +. + Muchas colisiones. +\end_layout + +\begin_layout Itemize + +\series bold +Suma posicional +\series default +: +\begin_inset Formula $h(k):=\sum_{i}k^{i}x_{i}\mod M$ +\end_inset + +, siendo +\begin_inset Formula $k$ +\end_inset + + normalmente primo. +\end_layout + +\begin_layout Itemize + +\series bold +Plegado +\series default + ( +\emph on +folding +\emph default +): +\begin_inset Formula $h(k):=\sum_{i=0}^{\lfloor n/p\rfloor}\prod_{j=1}^{p}x_{ip+j}\mod M$ +\end_inset + +, tomando +\begin_inset Formula $x_{k}=1\forall k>n$ +\end_inset + +. +\end_layout + +\begin_layout Itemize + +\series bold +Extracción +\series default +: +\begin_inset Formula $h(k):=x_{n_{1}}\cdots x_{n_{k}}\mod M$ +\end_inset + +. +\end_layout + +\begin_layout Itemize + +\series bold +Iterativos +\series default +: Tomar un valor inicial y, para cada +\begin_inset Formula $x_{i}$ +\end_inset + +, en orden, multiplicar por un valor base y combinar el resultado con +\begin_inset Formula $x_{i}$ +\end_inset + + mediante alguna operación. + Devolver esto módulo +\begin_inset Formula $M$ +\end_inset + +. + Así, la suma posicional toma como valor inicial, base y combinación, respectiva +mente, 0, +\begin_inset Formula $k$ +\end_inset + + y +\begin_inset Formula $+$ +\end_inset + +; djb2 toma 5381, 33 y +\begin_inset Formula $+$ +\end_inset + +; djb2a toma 5381, 33 y XOR, y FNV-1 toma 2166136261, 16777619 y XOR. +\end_layout + +\begin_layout Standard +Funciones de redispersión: +\end_layout + +\begin_layout Itemize + +\series bold +Lineal +\series default +: +\begin_inset Formula $h_{i}(k):=h(k)+i\mod M$ +\end_inset + +. + Sufre +\series bold +agrupamiento +\series default +: Si se llenan varias cubetas consecutivas y hay colisión, se debe consultar + todo el grupo. +\end_layout + +\begin_layout Itemize + +\series bold +Con saltos +\series default +: +\begin_inset Formula $h_{i}(k):=h(k)+Ci\mod M$ +\end_inset + +. + Sufre agrupamiento. +\end_layout + +\begin_layout Itemize + +\series bold +Cuadrática +\series default +: +\begin_inset Formula $h_{i}(k):=h(k)+D(i)\mod M$ +\end_inset + + con +\begin_inset Formula +\[ +D(i)=\begin{cases} +\left(\frac{i+1}{2}\right)^{2} & \text{si }x\text{ es impar}\\ +-\left(\frac{i}{2}\right)^{2} & \text{si }x\text{ es par} +\end{cases} +\] + +\end_inset + +Funciona cuando +\begin_inset Formula $M=4R+3$ +\end_inset + + para algún +\begin_inset Formula $R\in\mathbb{N}$ +\end_inset + +. +\end_layout + +\begin_layout Itemize + +\series bold +Doble +\series default +: +\begin_inset Formula $h_{i}(k)=h(k)+C(k)i\mod M$ +\end_inset + + para +\begin_inset Formula $C:T\rightarrow\{1,\dots,M-1\}$ +\end_inset + +. +\end_layout + +\end_body +\end_document |
