Professional Documents
Culture Documents
2 Ejemplos de algoritmos
8.
9. Escriba un algoritmo que regrese el ndice de la primera ocurrencia del elemento ms grande en la sucesin s, . . . , sn. Ejemplo: Si
la sucesin es
149
la sucesin invertida es
ELIE BRUNO AMY.
15. Escriba un mtodo estndar para sumar dos enteros decimales positivos, que se ensea en primaria, como un algoritmo.
16. Escriba un algoritmo que recibe como entrada la matriz A de n n
y produce la transpuesta AT.
17. Escriba un algoritmo que recibe como entrada la matriz de una relacin R y prueba si R es reflexiva.
18. Escriba un algoritmo que recibe como entrada la matriz de una relacin R y prueba si R es simtrica.
19. Escriba un algoritmo que recibe como entrada la matriz de una relacin R y prueba si R es transitiva.
20. Escriba un algoritmo que recibe como entrada la matriz de una relacin R y prueba si R es antisimtrica.
21. Escriba un algoritmo que recibe como entrada la matriz de una relacin R y prueba si R es una funcin.
22. Escriba un algoritmo que recibe como entrada la matriz de una relacin R y produce como salida la matriz de la relacin inversa R 1.
23. Escriba un algoritmo que recibe como entrada las matrices de las
relaciones R1 y R2 y produce como salida la matriz de la composicin R1 # R2.
2, 12, 6, 14
y x = 4, el algoritmo regresa falso porque ningn par de trminos
distintos en la sucesin suma 4.
Captulo 4 Algoritmos
encontr la primera ocurrencia de p en t. Si no, se verifica si p ocurre en el ndice 2 en t. Si
as es, nos detenemos, pues ya se encontr la primera ocurrencia de p en t. Si no, se verifica el ndice 3 en t, y as sucesivamente.
El algoritmo de bsqueda de texto se establece como el algoritmo 4.2.1.
Algoritmo 4.2.1
Bsqueda de texto
Este algoritmo busca una ocurrencia del patrn p en el texto t. Regresa el ndice ms pequeo i tal que p ocurre en t comenzando en el ndice i. Si p no ocurre en t, regresa 0.
Entrada: p (indexada de 1 a m), m, t (indexada de 1 a n), n
Salida: i
busca_texto(p, m, t, n){
for i = 1 to n m + 1{
j=1
// i es el ndice en t del primer carcter de la
// subcadena para comparar con p, y j es el ndice
// en p
// el ciclo while compara ti . . . ti+m1 y p1 . . . pm
while (ti+j1 == pj){
j=j+1
if(j > m)
return i
}
}
return 0
}
La variable i marca el ndice en t del primer carcter de la subcadena para compararlo con p. El algoritmo primero intenta i = 1, despus i = 2, y as sucesivamente. El ndice
n m + 1 es el ltimo valor posible para i ya que, en este punto, la cadena
tnm+1 tnm+2 tm tiene la longitud exacta m.
Despus de establecer el valor i, el ciclo while compara ti . . . ti+m1 y p1 . . . pm. Si
los caracteres coinciden,
ti+ j1 == p j
j se incrementa
j=j+1
y se comparan los siguientes caracteres. Si j es m + 1, todos los m caracteres coinciden y
hemos encontrado p en el ndice i en t. En este caso, el algoritmo regresa i:
if (j > m)
return i
Si el ciclo corri hasta completarse, nunca se encontr una coincidencia, en cuyo caso el
algoritmo regresa 0.
Ejemplo 4.2.2
150
La figura 4.2.1 muestra un rastreo del algoritmo 4.2.1 donde se busca el patrn 001 en el
texto 010001.
Orden
Ordenar (sort) una sucesin significa ponerla en algn orden especfico. Si se tiene una
sucesin de nombres, tal vez se desee ordenarla en orden no decreciente de acuerdo con el
diccionario.
001
010001
i =1
(1)
j =2
001
010001
i =3
(4)
j =1
001
010001
i =4
(7)
j =2
()
001
010001
i =1
(2)
j =2
001
010001
i =3
(5)
j =2
001
010001
i =4
(8)
151
j =1
()
001
010001
i =2
(3)
j =3
()
001
010001
i =3
(6)
j =3
001
010001
i =4
(9)
152
Captulo 4 Algoritmos
de manera que
s1, . . . , si, si+1
est ordenada.
Por ejemplo, suponga que i = 4 y s1, . . . , s4 es
8
13
20
27
13
16
20
27
Observe que 20 y 27, al ser mayores que 16, se mueven un ndice a la derecha para que entre 16. As, la parte de insercin del algoritmo es: Comenzando por la derecha de la sucesin ordenada, un elemento se mueve un ndice a la derecha si es mayor que el elemento
que se inserta. Esto se repite hasta llegar al primer ndice o encontrar un elemento menor o
igual que el elemento que se inserta.
Por ejemplo, para insertar 16 en
13
20
27
primero se comparan 16 y 27. Como 27 es mayor que 16, 27 se mueve un ndice a la derecha:
8
13
20
27
Despus se comparan 16 y 20. Como 20 es mayor que 16, 20 se mueve un ndice a la derecha:
8
13
20
27
Ahora se comparan 16 y 13. Como 13 es menor o igual que 16, se inserta (es decir, se copia) 16 al tercer ndice:
8
13
16
20
27
153
Captulo 4 Algoritmos
con eficiencia y comprometen la generalidad o la correccin necesaria. Como ilustracin,
se presenta un ejemplo que muestra la utilidad de permitir que un algoritmo tome decisiones aleatorias, violando el requerimiento de determinismo.
Un algoritmo aleatorizado no requiere que los resultados intermedios de cada paso
de la ejecucin estn definidos de manera nica y dependan slo de las entradas y los resultados de los pasos anteriores. Por definicin, cuando un algoritmo aleatorizado se ejecuta, en algn punto hace una eleccin aleatoria. En la prctica, se usa un generador de
nmeros seudoaleatorios (vea el ejemplo 2.2.15).
Debe suponerse la existencia de una funcin
rand(i, j),
que regresa un entero aleatorio entre los enteros i y j, inclusive. Como ejemplo, se describe un algoritmo aleatorizado que desordena una sucesin de nmeros. De manera ms precisa, la entrada es la sucesin a1, . . . , an y mueve los nmeros a posiciones aleatorias. Los
grandes torneos de bridge usan programas de computadora para barajar las cartas.
El algoritmo primero intercambia (es decir, cambia los valores de) a1 y arand(1,n). En
este punto, el valor de a1 puede ser igual a cualquiera de los valores originales de la sucesin. Despus, el algoritmo intercambia a2 y arand(2,n). Ahora el valor de a2 puede ser igual
a cualquiera de los valores restantes de la sucesin. El algoritmo contina hasta que intercambia an1 y arand(n 1,n) y la sucesin completa est desordenada.
Algoritmo 4.2.4
Desordenar (shuffle)
Este algoritmo desordena los valores de una sucesin
a1, . . . , an.
Entrada: a, n
Salida: a (desordenada)
desordena(a, n){
for i = 1 to n 1
swap(ai, arand(i,n))
}
Ejemplo 4.2.5
154
23
21
17
23
21
21
17
23
21
17
23
155
Observe que la salida (es decir, la sucesin desordenada) depende de las elecciones
aleatorias que hace el generador de nmeros aleatorios.
8. Por qu es til conocer o poder estimar el tiempo y el espacio requeridos por un algoritmo?
9. Por qu a veces es necesario relajar los requerimientos establecidos en la seccin 4.1 para un algoritmo?
11. Cules de los requerimientos de un algoritmo, segn se estableci en la seccin 4.1, viola un algoritmo aleatorizado?
Ejercicios
1. Haga un seguimiento del algoritmo 4.2.1 para la entrada t = balalaika y p = bala.
2. Haga un seguimiento del algoritmo 4.2.1 para la entrada t = balalaika y p = lai.
34 55 144 259.
7. Haga el seguimiento del algoritmo 4.2.3 para la entrada
34 34 34 34.
34 57 72 101 135.
rand(1, 5) = 5,
rand(3, 5) = 4,
rand(2, 5) = 5,
rand(4, 5) = 4.
rand(4, 5) = 5.
rand(2, 5) = 5,
rand(4, 5) = 4.
rand(3, 5) = 3,
rand(1, 5) = 2,
rand(3, 5) = 3,
34 20 144 55.
rand(1, 5) = 5,