Arreglos Octubre del 2004. Introducción Asignaciones que afectan arreglos Operacion de intercambio...
-
Upload
natividad-torres-munoz -
Category
Documents
-
view
218 -
download
0
Transcript of Arreglos Octubre del 2004. Introducción Asignaciones que afectan arreglos Operacion de intercambio...
![Page 1: Arreglos Octubre del 2004. Introducción Asignaciones que afectan arreglos Operacion de intercambio Bandera holandesa.](https://reader036.fdocuments.es/reader036/viewer/2022062323/5665b4941a28abb57c925af2/html5/thumbnails/1.jpg)
Arreglos
Octubre del 2004
![Page 2: Arreglos Octubre del 2004. Introducción Asignaciones que afectan arreglos Operacion de intercambio Bandera holandesa.](https://reader036.fdocuments.es/reader036/viewer/2022062323/5665b4941a28abb57c925af2/html5/thumbnails/2.jpg)
Introducción
• Asignaciones que afectan arreglos
• Operacion de intercambio
• Bandera holandesa
![Page 3: Arreglos Octubre del 2004. Introducción Asignaciones que afectan arreglos Operacion de intercambio Bandera holandesa.](https://reader036.fdocuments.es/reader036/viewer/2022062323/5665b4941a28abb57c925af2/html5/thumbnails/3.jpg)
Asignaciones a los arreglos
• h.E := F– La ejecucion afecta todo el arreglo– Sustitucion de funciones por funciones
• h (x:u).i =– u cuando x=i– h.i en caso contrario
1 0 3
1 1 3h
h (1:0)
![Page 4: Arreglos Octubre del 2004. Introducción Asignaciones que afectan arreglos Operacion de intercambio Bandera holandesa.](https://reader036.fdocuments.es/reader036/viewer/2022062323/5665b4941a28abb57c925af2/html5/thumbnails/4.jpg)
Problemas en la asignacion
{h.(h.1) = 1}
h.(h.1) := 0
{h.0 = 1 /\ h.1 = 1}
1 1 ...
1 0 ...
{h.(h.1) = 1}
h.(h.1) := 0
{1 = 0}
Es cierto, esta terna vale, pero no satisface del todo. Uno buscaun programa que se ejecute.
![Page 5: Arreglos Octubre del 2004. Introducción Asignaciones que afectan arreglos Operacion de intercambio Bandera holandesa.](https://reader036.fdocuments.es/reader036/viewer/2022062323/5665b4941a28abb57c925af2/html5/thumbnails/5.jpg)
Problemas en la asignacion
{h.(h.1) = 0}
h.(h.1) := 0
{h.0 = 0 /\ h.1 = 1}
0 1 ...
0 0 ...
{h.(h.1) = 0}
h.(h.1) := 0
{0 = 0}
Definitivamente, hay problemas
1 1 ...
1 0 ...
![Page 6: Arreglos Octubre del 2004. Introducción Asignaciones que afectan arreglos Operacion de intercambio Bandera holandesa.](https://reader036.fdocuments.es/reader036/viewer/2022062323/5665b4941a28abb57c925af2/html5/thumbnails/6.jpg)
Mas problemas
x, y := 0, 0;
f.x, f.y := 0, 1
No se admiten asignaciones multiples en los arreglos
![Page 7: Arreglos Octubre del 2004. Introducción Asignaciones que afectan arreglos Operacion de intercambio Bandera holandesa.](https://reader036.fdocuments.es/reader036/viewer/2022062323/5665b4941a28abb57c925af2/html5/thumbnails/7.jpg)
Definicion
wp.(h.E := F).Q Q(h := h(E:F))
wp.(h.E := F).Q def.F /\ def.(h.E) /\ Q(h := h(E:F))
![Page 8: Arreglos Octubre del 2004. Introducción Asignaciones que afectan arreglos Operacion de intercambio Bandera holandesa.](https://reader036.fdocuments.es/reader036/viewer/2022062323/5665b4941a28abb57c925af2/html5/thumbnails/8.jpg)
Calculo
{h.(h.1) = 1}
h.(h.1) := 0
{h(h.1:0).(h(h.1:0).1) = 1}
h(h.1:0).(h(h.1:0).1)= (si h.1 = 1)
h(1:0).(h(1:0).1)=h(1:0).0=h.0
h(h.1:0).(h(h.1:0).1)= (si h.1 1)
h(h.1:0).(h.1)=0
h(h.1:0).(h(h.1:0).1) = 1h.1 = 1 h.0 = 1/\ h.1 1 0 = 1h.0 = 1 /\ h.1 = 1
![Page 9: Arreglos Octubre del 2004. Introducción Asignaciones que afectan arreglos Operacion de intercambio Bandera holandesa.](https://reader036.fdocuments.es/reader036/viewer/2022062323/5665b4941a28abb57c925af2/html5/thumbnails/9.jpg)
todosCeros|[par N: int {N 0};var h: array [0..N) of int; todosCeros{(/\i : 0 i < N : h.i = 0)}]|.
Tactica: reemplazo de N por n,incrementando n
P0 : (/\i : 0 i < n : h.i = 0)P1 : 0 n N
|[par N: int {N 0};var h: array [0..N) of int; n := 0; do n N {P0 /\ P1 /\ n N} establecerInvariante {(P0 /\ P1) (n := n+1)} n := n+1 od{(/\i : 0 i < N : h.i = 0)}]|.
![Page 10: Arreglos Octubre del 2004. Introducción Asignaciones que afectan arreglos Operacion de intercambio Bandera holandesa.](https://reader036.fdocuments.es/reader036/viewer/2022062323/5665b4941a28abb57c925af2/html5/thumbnails/10.jpg)
todosCeros|[par N: int {N 0};var h: array [0..N) of int; n := 0; do n N {P0} establecerInvariante {P0(n := n+1)} n := n+1 od{(/\i : 0 i < N : h.i = 0)}]|.
P0(n := n+1)(/\i : 0 i < n+1 : h.i = 0)(/\i : 0 i < n : h.i = 0) /\ h.n = 0P0 /\ h.n = 0
P0(/\i : 0 i < n : h.i = 0)(/\i : 0 i < n : h(n:0).i = 0)P0(h := h(n:0))
![Page 11: Arreglos Octubre del 2004. Introducción Asignaciones que afectan arreglos Operacion de intercambio Bandera holandesa.](https://reader036.fdocuments.es/reader036/viewer/2022062323/5665b4941a28abb57c925af2/html5/thumbnails/11.jpg)
todosCeros|[par N: int {N 0};var h: array [0..N) of int; n := 0; do n N {P0(h := h(n:0)} h.n := 0 {P0 /\ h.n = 0} n := n+1 od{(/\i : 0 i < N : h.i = 0)}]|.
P0(n := n+1)(/\i : 0 i < n+1 : h.i = 0)(/\i : 0 i < n : h.i = 0) /\ h.n = 0P0 /\ h.n = 0
P0(/\i : 0 i < n : h.i = 0)(/\i : 0 i < n : h(n:0).i = 0)P0(h := h(n:0))
h(n:0).n = 0 vale por definicion
![Page 12: Arreglos Octubre del 2004. Introducción Asignaciones que afectan arreglos Operacion de intercambio Bandera holandesa.](https://reader036.fdocuments.es/reader036/viewer/2022062323/5665b4941a28abb57c925af2/html5/thumbnails/12.jpg)
todosCeros|[par N: int {N 0};var h: array [0..N) of int; todosCeros{(/\i : 0 i < N : h.i = 0)}]|.
Tactica: reemplazo de N por n,incrementando n
P0 : (/\i : 0 i < n : h.i = 0)P1 : 0 n N
|[par N: int {N 0};var h: array [0..N) of int; n := 0; do n N {P0} h.n := 0 {P0 (n := n+1)} n := n+1 od{(/\i : 0 i < N : h.i = 0)}]|.
![Page 13: Arreglos Octubre del 2004. Introducción Asignaciones que afectan arreglos Operacion de intercambio Bandera holandesa.](https://reader036.fdocuments.es/reader036/viewer/2022062323/5665b4941a28abb57c925af2/html5/thumbnails/13.jpg)
P0 : (/\i : 0 i < n : h.i = H.i)P1 : 0 n N
asignacionSimpleEnArreglos|[par N: int {N 0};var h: array [0..N) of int; asignacionSimpleEnArreglos{(/\i : 0 i < N : h.i = H.i)}]|.
Tactica: reemplazo de N por n,incrementando n
|[par N: int {N 0};var h: array [0..N) of int; n := 0; do n N {P0 /\ E = H.n} h.n := E {P0 (n := n+1)} n := n+1 od{(/\i : 0 i < N : h.i = H.i)}]|.
cuando h no aparece
en H
![Page 14: Arreglos Octubre del 2004. Introducción Asignaciones que afectan arreglos Operacion de intercambio Bandera holandesa.](https://reader036.fdocuments.es/reader036/viewer/2022062323/5665b4941a28abb57c925af2/html5/thumbnails/14.jpg)
dados|[par N: int {N 0};par X: array [0..N) of int;{(/\i : 0 i < N : 1 X.i 6)}var h: array [1..6] of int; dados{(/\i : 1 i 6 : h.i = (#k : 0 k < N : X.k = i))}]|.
P0 : (/\i : 1 i 6 : h.i = (#k : 0 k < n : X.k = i))P1 : 0 n N
|[ ... n := 0; algoParecidoAtodosCeros do n N {P0} establecerInvariante {P0(n := n+1)} n := n+1 od... ]|.
![Page 15: Arreglos Octubre del 2004. Introducción Asignaciones que afectan arreglos Operacion de intercambio Bandera holandesa.](https://reader036.fdocuments.es/reader036/viewer/2022062323/5665b4941a28abb57c925af2/html5/thumbnails/15.jpg)
dados
h(X.n : h.(X.n)+1).i= (i X.n)
h.i= (P0)
(#k : 0 k < n : X.k = i) + #.(X.n=i)
h(X.n : h.(X.n)+1).i= (i = X.n)
h.(X.n)+1= (P0)
(#k : 0 k < n : X.k = X.n) + 1=(#k : 0 k < n : X.k = i) + #.(X.n=i)
P0 : (/\i : 1 i 6 : h.i = (#k : 0 k < n : X.k = i))
P0(n := n+1) (/\i : 1 i 6 : h.i = (#k : 0 k < n+1 : X.k = i)) (/\i : 1 i 6 : h.i = (#k : 0 k < n : X.k = i) + #.(X.n=i))
![Page 16: Arreglos Octubre del 2004. Introducción Asignaciones que afectan arreglos Operacion de intercambio Bandera holandesa.](https://reader036.fdocuments.es/reader036/viewer/2022062323/5665b4941a28abb57c925af2/html5/thumbnails/16.jpg)
dados
|[ ... n := 0; algoParecidoAtodosCeros do n N {P0(n := n+1)(h := h(X.n : h.(X.n)+1))} h.(X.n) := h.(X.n) + 1 {P0(n := n+1)} n := n+1 od... ]|.
|[ ... n := 0; algoParecidoAtodosCeros do n N {P0} establecerInvariante {P0(n := n+1)} n := n+1 od... ]|.
![Page 17: Arreglos Octubre del 2004. Introducción Asignaciones que afectan arreglos Operacion de intercambio Bandera holandesa.](https://reader036.fdocuments.es/reader036/viewer/2022062323/5665b4941a28abb57c925af2/html5/thumbnails/17.jpg)
Intercambios
x, y := y, xh.x, h.y := h.y, h.x;
No se admiten asignaciones multiples en los arreglos
![Page 18: Arreglos Octubre del 2004. Introducción Asignaciones que afectan arreglos Operacion de intercambio Bandera holandesa.](https://reader036.fdocuments.es/reader036/viewer/2022062323/5665b4941a28abb57c925af2/html5/thumbnails/18.jpg)
Intercambios
h (i, j: A, B).i = Ah (i, j: A, B).j = Bh (i, j: A, B).k = h.kh (i, i: A, B).i = ...
wp.(swap.h.E.F).Q
Q(h := h(E,F : h.E,h.F))
wp.(swap.h.E.F).Q
def.(h.E) /\ def.(h.F) /\ Q(h := h(E,F : h.E,h.F))
![Page 19: Arreglos Octubre del 2004. Introducción Asignaciones que afectan arreglos Operacion de intercambio Bandera holandesa.](https://reader036.fdocuments.es/reader036/viewer/2022062323/5665b4941a28abb57c925af2/html5/thumbnails/19.jpg)
Intercambio simple
{(/\i : iE /\ iF : h.i=H.i) /\ h.E=A /\ h.F=B}swap.h.E.F{(/\i : iE /\ iF : h.i=H.i) /\ h.E=B /\ h.F=A}
cuando h no ocurreni en E ni en F
![Page 20: Arreglos Octubre del 2004. Introducción Asignaciones que afectan arreglos Operacion de intercambio Bandera holandesa.](https://reader036.fdocuments.es/reader036/viewer/2022062323/5665b4941a28abb57c925af2/html5/thumbnails/20.jpg)
Bandera holandesa
?
![Page 21: Arreglos Octubre del 2004. Introducción Asignaciones que afectan arreglos Operacion de intercambio Bandera holandesa.](https://reader036.fdocuments.es/reader036/viewer/2022062323/5665b4941a28abb57c925af2/html5/thumbnails/21.jpg)
Bandera holandesa|[par N: int {N 0};var h: array [0..N) of [rojo, blanco, azul]; banderaHolandesa{(\/p,q : 0 p q N : (/\i : 0 i < p : h.i = rojo) /\ (/\i : p i < q : h.i = blanco) /\ (/\i : q i < N : h.i = azul))}]|.
Solo se admitenintercambios
R: (/\i : 0 i < r : h.i = rojo)
/\ (/\i : r i < w : h.i = blanco)
/\ (/\i : w i < N : h.i = azul)
Decision !!!Agregar una
variable b
![Page 22: Arreglos Octubre del 2004. Introducción Asignaciones que afectan arreglos Operacion de intercambio Bandera holandesa.](https://reader036.fdocuments.es/reader036/viewer/2022062323/5665b4941a28abb57c925af2/html5/thumbnails/22.jpg)
Bandera holandesa
r bw
Pr: (/\i : 0 i < r: h.i = rojo)
Pw: (/\i : r i < w: h.i=blanco)
Pb: (/\i : b i < N: h.i = azul)
P1: 0 r w b N
Este largo es la cota
Inicializacion: r, w, b := 0, 0, NCondicion de fin: b = w
![Page 23: Arreglos Octubre del 2004. Introducción Asignaciones que afectan arreglos Operacion de intercambio Bandera holandesa.](https://reader036.fdocuments.es/reader036/viewer/2022062323/5665b4941a28abb57c925af2/html5/thumbnails/23.jpg)
Bandera holandesa|[par N: int {N 0};var h: array [0..N) of [rojo, blanco, azul];var r, w, b: int; r, w, b := 0, 0, N {inv. Pr /\ Pw /\ Pb /\ P1, cota. b-w} do w b if h.w = red Sr [] h.w = white Sw [] h.w = blue Sb fi od]|.
Decision !!!Investigar
la posicion w