-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Repo público de las demos de discreta
- Loading branch information
0 parents
commit b7e1b1c
Showing
30 changed files
with
299 additions
and
0 deletions.
There are no files selected for viewing
Empty file.
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
¿Cual es la complejidad del algoritmo de Dinic? Probarla en ambas versiones: Dinitz original y Dinic-Even. (no hace falta probar que la distancia en networks auxiliares sucesivos aumenta). | ||
|
||
## Estructura | ||
- Enunciamos que la longitud de los sucesivos networks auxiliares crece. | ||
- Primero mostramos los aspectos generales de la complejidad de algoritmos "tipo Dinic" | ||
- Luego vemos cuánto cuesta conseguir un flujo bloqueante en cada implementación | ||
|
||
## Prueba | ||
Como sabemos que los networks auxiliares crecen en longitud, tenemos que a lo sumo abrán $n$ networks auxiliares. | ||
|
||
Luego, también sabemos que la complejidad de construir un network auxiliar es la de BFS: O(m) por lo tanto tenemos que la complejidad de un algoritmo tipo dinic es | ||
$$n * (O(m) + CFB) = O(n * (m+CFB))$$ | ||
|
||
### Dinitz | ||
Para ver la complejidad de la versión de dinitz es necesario entonces ver el costo CFB. | ||
|
||
CFB en dinitz va a consistir del costo de: | ||
- hacer una búsqueda DFS | ||
- podar antes de cada búsqueda | ||
|
||
La búsqueda tiene la propiedad de que nunca vamos a hacer backtracking, ya que hemos podado deadends anteriormente. Por lo tanto el costo de buscar un camino en dinitz es O(n) | ||
|
||
Ahora debemos ver cuántos caminos pueden haber y cuánto cuesta podar. | ||
|
||
A lo sumo pueden haber $m$ caminos. | ||
|
||
Para analizar el costo de podar, debemos analizar no una sola poda sino todas las podas de un CFB en conjunto. De esta forma, podemos ver las podas como dos operaciones separadas: | ||
- revisar los vértices de niveles más altos a más bajos para ver si borrarlos(PV) | ||
- Borrar los vértices que no tengan lado(s) de salida(B). | ||
|
||
La compjejidad de cada PV es O(n), pues mira los vértices nada más. | ||
|
||
La complejidad de un único B(x) es O(m) pues tiene que borrar a todos los vecinos del vértice x. Pero si lo vemos en conjunto, el costo de todos los B es $\sum_{i=1}^n \Gamma(x_i) = 2m$ | ||
|
||
Por lo tanto la complejidad de CFB nos queda: | ||
|
||
$$buscarcaminos + \text{revisar por cadacamino} + \text{borrar vertices revisados}$$ | ||
$$O(nm) + O(nm) + O(2m) = O(nm)$$ | ||
Por lo tanto la complejidad total de Dinitz es | ||
|
||
$$n * (O(m) + CFB) = O(n * (m+CFB)) = O(mn^2)$$ | ||
### Even | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
Dados dos networks auxiliares sucesivos, $NA$ y $NA'$, ya tenemos por la prueba de Edmonds-Karp que $d_f(s, x) \le d_{f'}(s, x)$. Ahora queremos probar que ahí vale siempre un $\lt$. | ||
|
||
## Estructura | ||
- Asumir que en ambos networks llegamos a t, sino es trivial que la distancia aumenta. | ||
- Hay un camino en NA' que no está en NA, y hay dos formas de que eso pase | ||
- Vemos para cada forma que la distancia aumenta | ||
- Forma 1: falta un vértice | ||
El vértice que falta en NA tiene que tener una distancia f mayor o igual a t. | ||
En NA', tiene una distancia estrictamente menor a t. | ||
Por lo tanto crece la distancia hasta t. | ||
- Forma 1: falta un lado | ||
Vemos que si falta el lado xi -> xi+1, es porque d(xi+1) <= d(xi). Luego tenemos d(xi+1) <= d(xi) <= d'(xi) = i < i+1 = d'(xi+1). Como la distancia hasta xi+1 crece estrictamente luego de actualizar el flujo, pero sigue siendo parte de un camino de menor longitud hasta t, entonces la distancia a t crece. | ||
|
||
|
||
## Prueba | ||
Si $t \notin NA'$ terminamos. | ||
|
||
Asumamos entonces que $t \in NA'$: | ||
- Hay un camino dirigido $x0, x1,...,x_{r-1}x_r$ | ||
- Este camino no pertenece a $NA$, pues sino hubiera sido saturado y no podría estar en $NA'$ | ||
|
||
Como el camino no está en $NA$, puede ser por dos razones: | ||
- Algún vértice del camino no está | ||
- Algún lado no está. | ||
|
||
### Caso 1: falta un vértice | ||
|
||
Si un vértice $x_i$ no está, entonces sabemos que $x_i \ne t$ | ||
- La única forma de que $x_i$ no esté en NA es que $d_f(t) \le d_f(xi)$ | ||
- Al ser $NA'$ un layered network, tenemos que $d_{f'}(xi) = i$ | ||
- Como $x_i \ne x_r = t$, tenemos que $d_f(t) \le d_f(xi) \le d_{f'}(xi) = i < r$ | ||
Por lo tanto hemos probado que en este caso que la longitud aumenta. | ||
|
||
### Caso 2: falta un lado | ||
|
||
Digamos que el primer lado que falta es $\overrightarrow{x_ix_{i+1}}$. | ||
|
||
El lado $\overrightarrow{x_ix_{i+1}}$ puede no estar porque el lado que representa en el network original esta saturado y es forward o vacio y es backward. Pero eso sería absurdo, pues no es posible usar ese lado en NA y por lo tanto sería imposible que se llene / dessature para si estar en NA'. | ||
|
||
La única opción que nos queda entonces es que el lado no esté porque $d{f}(x_{i+1}) \le d(x_i)$. | ||
|
||
Entonces tenemos | ||
|
||
$$d_f(x_{i+1}) \le d_f(x_i) \le d_{f'}(x_i) = i \lt i + 1 = d_{f'}(x_{i+1})$$ | ||
$$d_f(x_{i+1}) \lt d_{f'}(x_{i+1})$$ | ||
En este caso caso es claro que la distancia aumenta, pues | ||
$$d_f(t) = d_f(x_{i+1}) + b_{f}(x_{i+1})$$ | ||
$$ \le d_f(x_{i+1}) + b_{f'}(x_{i+1})$$ | ||
$$ \lt d_{f'}(x_{i+1}) + b_{f'}(x_{i+1})$$ | ||
$$= d_{f'}(t)$$ | ||
|
||
|
||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
Probar que si, dados vértices x, z y flujo f definimos a la distancia entre x y z relativa a f como la longitud del menor f-camino aumentante entre x y z, si es que existe tal camino, o infinito si no existe o 0 si x = z, denotandola por df (x, z), y definimos dk(x) = dfk (s, x), donde fk es el k-ésimo flujo en una corrida de Edmonds-Karp, entonces dk(x) ≤ dk+1(x). | ||
|
||
**Suposicion**: Asumimos para esta prueba que si existe el lado xz entonces no existe el lado zx. Esto ya que por lo que vimos en el práctico, de cualquier network podemos definir uno nuevo en el que ponemos en cada arco paralelo "un vértice intermedio" y así tener un problema sin esta propiedad que tiene la misma solución max-flow. | ||
|
||
## Definición: fFF Vecino | ||
decimos que z es fFF vecino de x si desde x podemos enviar flujo a z o devolver flujo a z. | ||
|
||
## Estructura | ||
|
||
- Asumimos que $A = \{y : d_{k+1}(y) < d_k(y)\} \ne \emptyset$ | ||
- Tomando algún $y$ en $A$ | ||
- Puntualmente tomaremos al $x$ tal que $d_{k+1}$ sea mínimo. | ||
- Probamos que existe un $z$ anterior a $x$ desde el que antes no podías llegar a x pero ahora si. | ||
**- Vemos que dada esa situación, $z \notin A$ y por lo tanto $d_k(x) > d_k(z) +1$ ESTA ES LA PARTE DIFICIL** | ||
- Luego resta ver que para que esto haya ocurrido, antes tomamos un camino s ... x z ... t y por lo tanto $d_k(z) = d_k(x) + 1$ | ||
- Usando las conclusiones de los últimos dos pasos llegamos a que 0 > 2 | ||
## Prueba | ||
Por hipótesis tenemos que $d_{k+1}(x) \lt d_k(x) \le \infty$ y por lo tanto existe camino $f_{k+1}$ aumentante de menor longitud hasta x. | ||
|
||
**Observación**: $s$ no pertenece a $A$, pues la distancia a si mismo no puede bajar de 0. Por lo tanto, en el camino que consideramos existe un $z$ directamente anterior a x. | ||
|
||
Tenemos entonces que $d_{k+1}(z) = d_{k+1}(x) - 1$, pues x es fFF vecino de z. | ||
Entonces $d_{k+1}(z) < d_{k+1}(x)$ y por lo tanto $z \notin A$ | ||
|
||
**Por la definicón de $A$, $d_{k}(z) \le d_{k+1}(z)$** | ||
|
||
Entonces tenemos: | ||
$$d_k(x) \gt d_{k+1}(x) \text{ porque } x \in A = d_{k+1}(z) + 1 \text{ porque x es fFF vecino de z } \ge d_k(z)+1 $$ | ||
$$d_k(x) > d_k(z) + 1$$ | ||
Por lo tanto x no es fFF vecino de z en el paso k. | ||
|
||
Esto **solo puede pasar** si el camino que usamos para pasar de $f_k$ a $f_{k+1}$ incluye xz o xbackz. | ||
|
||
Veamos cada caso: | ||
|
||
- $\overrightarrow{xz}$ | ||
Tenemos que $f_k(\overrightarrow{xz}) = 0$ y $f_{k+1}(\overrightarrow{xz}) \gt 0$ por lo que vimos de la vecindad de z a x en cada paso. Por lo tanto de k a k+1 ENVIAMOS flujo de x a z. | ||
|
||
- $\overrightarrow{zx}$ | ||
Tenemos que $f_k(\overrightarrow{zx}) = c(\overrightarrow{xz})$ y $f_{k+1}(\overrightarrow{xz}) \lt c(\overrightarrow{xz})$ por lo que vimos de la vecindad de z a x en cada paso. Por lo tanto de k a k+1 DEVOLVEMOS flujo de x a z. | ||
|
||
En **ambos casos** la longitud del camino que usamos es mímina y por lo tanto | ||
$$d_k(z) = d_k(x) + 1$$ | ||
Pero entonces | ||
|
||
$$d_k(z) = d_k(x) + 1 \gt (d_k(z) + 1) + 1$$ | ||
$$0 \gt 2$$ | ||
Absurdo. Lo único que asumismos hasta ahora fue que $A$ no era vacío, y por lo tanto lo es. | ||
|
||
## Notas | ||
Por qué $d_k(z) = d_k(x) + 1$? | ||
- Porque si bien tendríamos sólo que $d_k(z) \le d_k(x) + 1$ si tuvieramos que z es $f_k$FF vecino de x, sabemos también en ese punto de la demostración que en el paso k ELEGIMOS un camino s ... xz ... t y por lo tanto la longitud de s ... xz es la mínima posible. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
¿Cuál es la complejidad del algoritmo de Edmonds-Karp? Probarlo.(Nota: en la prueba se definen unas distancias, y se prueba que esas distancias no disminuyen en pasos sucesivos de EK. Ud. puede usar esto sin necesidad de probarlo) | ||
|
||
## Enunciado | ||
Sea n la cantidad de vértices y m la cantidad de lados, E-K tiene complejidad $O(nm^2)$ | ||
|
||
## Estructura de la prueba | ||
|
||
Supondremos que en el network no existen arcos paralelos xy e yx. Esta propiedad no es restrictiva, ya que para cualquier network N que presente arcos paralelos, podemos dar un N' tal que sea como N PERO con vértices "intermedios" adicionales en medio de cada arco paralelo. | ||
|
||
Primero queremos ver que los flujos parciales $f_0, f_1, f_2,...$ son finitos y daremos una cota para ellos. | ||
|
||
Como la búsqueda y construcción de cada flujo parcial se hace con BFS, cada incremento tiene complejidad $O(m)$ (máximo vas a tener que ver todos los lados hasta llegar a $t$) | ||
|
||
Si probamos que solo puede haber $O(nm)$ búsquedas, entonces habremos probado la complejidad. | ||
|
||
**Estructura:** | ||
- Damos lema y definiciones | ||
- Acotamos la cantidad de veces que se puede volver crítico un lado ($O(n)$) | ||
- Concluímos que como todo lado puede volverse crítico $O(n)$ veces, y siempre se vuelve crítico un lado en un nuevo paso de E-K, la cantidad de pasos es $O(nm)$ | ||
- La complejidad total es entonces $O(nm^2)$ | ||
|
||
**Las definiciones están despúés de la prueba.** | ||
|
||
## Prueba | ||
Vemos que se puede hacer crítico un lado (n-1)/2 veces viendo que entre dos pasos $k$ y $r$ la f-distancia entre s y t debe haber aumentado en al menos 2. | ||
|
||
Supongamos que en el paso $k$ **se satura xy** para obtener el flujo $f_{k+1}$, por lo tanto existe un camino de longitud mínima s ... xy ... t. Entonces | ||
$$d_k(y) = d_k(x) + 1 (\text{i})$$ | ||
Luego para que vuelva a hacerse crítico xy en un paso $r$ tiene que haber un paso intermedio $l$ tal que $r \ge l > k$ en el que se vacíe al menos un poco. **Ya sea para que se vuelva a saturar, o bien para que luego (o en esa misma instancia, si r = l) se vacíe por completo.** Tenemos entonces un camino s ... ybackx ... t y por lo tanto | ||
$$d_l(x) = d_l(y) + 1 \text{ (ii)}$$ | ||
Ahora hacemos cuentas para ver cuanto tiene que aumentar la distancia a $t$ entre cada evento de criticalidad sobre un lado xy: | ||
$$d_l(t) = d_l(x) + b_l(x)$$ | ||
$$d_l(t) = d_l(y) + 1 + b_l(x) \text{ por (ii)}$$ | ||
$$d_l(t) \ge d_k(y) + 1 + b_k(x) \text{ por lema distancias}$$ | ||
$$d_l(t) \ge d_k(x) + 1 + 1 + b_k(x) \text{ por (i)}$$ | ||
$$d_l(t) \ge d_k(t) + 2$$ | ||
Ahora veamos el caso en el que se **vacía xy** para obtener el flujo $f_{k+1}$: | ||
Mismo planteo con $r \ge l \gt k$ pero en este caso tenemos que en el paso k tenemos el camino s ... ybackx ... t y por lo tanto | ||
$$d_k(x) = d_k(y) + 1 \text{ (iii)}$$ | ||
Luego en el paso $l$ tenemos que se debe saturar del todo o un poco el lado xy. Tenemos: | ||
|
||
$$d_l(y) = d_l(x) + 1 \text{ (iv)}$$ | ||
Hacemos las cuentas otra vez: | ||
$$d_l(t) = d_l(y) + b_l(y)$$ | ||
$$d_l(t) = d_l(x) + 1 + b_l(y) \text{ por (iv)}$$ | ||
$$d_l(t) \ge d_k(x) + 1 + b_k(y) \text{ por lema}$$ | ||
$$d_l(t) \ge d_k(y) + 1 + 1 + b_k(y) \text{ por (iii)}$$ | ||
$$d_l(t) \ge d_k(t) + 2$$ | ||
En ambos casos vemos que $d_r(t) \ge d_l(t) => d_r(t) \ge d_k(t) + 2$ | ||
|
||
Como la máxima distancia hasta t es n-1, tenemos que un lado puede hacerse crítico $\frac{n-1}{2}$ veces: $O(n)$. | ||
|
||
Por lo tanto la complejidad total es $O(flujos * BFS) = O(m * n * m) = O(nm^2)$ | ||
|
||
## Definiciones / lemas internos | ||
|
||
|
||
### Lema de las distancias (no se pide la prueba) | ||
|
||
las distancias $d_k(x)$ y $b_k(x)$ son <= a $d_{k+1}(x)$ y $b_{k+1}(x)$ respectivamente. | ||
|
||
|
||
### Lado crítico | ||
Un lado xy se vuelve crítico si: | ||
- se satura completamente | ||
- se vacía completamente | ||
|
||
### Distancias | ||
$$d_k(x) = \text{ longitud del menor } f_k\text{-camino aumentante de s a x}$$ | ||
$$b_k(x) = \text{ longitud del menor } f_k\text{-camino aumentante de x a t}$$ |
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
## Usos de machine learning | ||
- Texto natural | ||
- Imagenes | ||
- Recomendaciones | ||
- Clasificación: spam, fraude, copyright, incumplimiento de normas de conducta | ||
|
||
## Paradigma general | ||
|
||
Machine learning es un programa que **aprende** a partir de **Experiencia(E)** con respecto a una **tarea T** y una medida de **rendimiento P**. | ||
|
||
Optimizamos P para mejorar nuestro rendimiento sobre los datos que tenemos. | ||
|
||
## Aspectos a tener cuidado | ||
- Encontrar los features correctos para caracterizar el problema | ||
|
||
## Códificación de features | ||
|
||
| Provincia | número | binario | one-hot | | ||
| ------------ | ------ | ------- | ------- | | ||
| Córdoba | 0 | 0 | 10000 | | ||
| Catamarca | 1 | 01 | 010000 | | ||
| .... | - | - | - | | ||
| Buenos Aires | 5 | 0001 | 000001 | | ||
|
||
Codificamos variables con vectores para evitar que se pueda relacionar el tamaño de los datos con los encodings con la variable a predecir de forma erronea. *Mi intuición me dice que se hacen así porque son ortogonales* | ||
|
||
Otras variables pueden llegar a ser numéricas y de cuantificación, por lo que si es importante que el modelo pueda entrenarse con la posibilidad de relacionar el valor numérico con la función objetivo. | ||
|
||
## Tipos de modelos | ||
- Red neuronal | ||
- Árbol de decisión | ||
- Regresión logística | ||
## Cosas random | ||
- Los modelos que vemos son **modelos probabilístico** | ||
- regresores != clasificadores | ||
- Ley de Sif: siempre nos queda algo afuera cuando hacemos reglas lógicas | ||
|
||
## Referencias | ||
- Scikit-learn |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
Lista de cosas que pueden tomarse en los examenes de julio/agosto 2023 de la parte teórica que dio Daniel. Milagro subirá sobre su parte. | ||
|
||
Ademas de estos teoremas, en Diciembre/Febrero/Marzo pueden agregarse otros. | ||
|
||
|
||
1. [Edmonds-karp](./Demostraciones/comp-ek) | ||
2. [[Propiedad de las distancias]] | ||
3. [[Complejidad de Dinic(y Dinic Even)]] | ||
4. ¿Cual es la complejidad del algoritmo de Wave? Probarla. (no hace falta probar que la distancia en networks auxiliares sucesivos aumenta). | ||
5. | ||
6. Probar que el valor de todo flujo es menor o igual que la capacidad de todo corte y que si f es un flujo, entonces las | ||
siguientes afirmaciones son equivalentes: | ||
i) f es maximal. | ||
ii) Existe un corte S tal que v(f) = cap(S). (y en este caso, S es minimal) | ||
iii) No existen f-caminos aumentantes. | ||
(puede usar sin necesidad de probarlo que si f es flujo y S es corte entonces v(f) = f(S, S) − f(S, S) ) | ||
7. Probar que 2-COLOR es polinomial. | ||
8. Enunciar y probar el Teorema de Hall. | ||
9. Enunciar y probar el teorema del matrimonio de K ̋onig. | ||
10. Probar que si G es bipartito entonces $\chi '(G) = \Delta$. | ||
|
||
11. Probar la complejidad $O(n^4)$ del algoritmo Hungaro y dar una idea de como se la puede reducir a $O(n^3)$. | ||
12. Enunciar el teorema de la cota de Hamming y probarlo. | ||
13. Probar que si H es matriz de chequeo de C, entonces; | ||
|
||
$$\delta(C) = Min\{j : \exists \text{ un conjunto de j columnas LD de H}\}$$ | ||
|
||
(LD es “linealmente dependiente”) | ||
14. Sea C un c ́odigo c ́ıclico de dimensi ́on k y longitud n y sea g(x) su polinomio generador. Probar que: | ||
i) C esta formado por los multiplos de g(x) de grado menor que n: | ||
C = {p(x) : gr(p) < n&g(x)|p(x)} | ||
|
||
ii) C = {v(x) | ||
|
||
g(x) : v es un polinomio cualquiera} | ||
|
||
iii) gr(g(x)) = n − k. | ||
iv) g(x) divide a 1 + x | ||
n | ||
15. Probar que 3SAT es NP-completo | ||
16. Probar que 3-COLOR es NP-completo. |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.