Anda di halaman 1dari 26

Facultad de Ingeniería Industrial y de Sistemas

e Industrial
ASIGNATURA : INTROD. A LA MATEMATICA DISCRETA
PROFESOR : Ricardo Chung
AULA : B415 – B403
III Ciclo – Regular - Noche – X - Procou
FECHA : lunes 16 de enero del 2011 – 2011 - 1
TEMA : IM – Combinatoria – Numeración - Algoritmos


Primera Práctica Dirigida

1. Demuestre por Inducción Matemática lo siguiente:


IM : 1er Paso : Verificar para n = m0 2do Paso : Suponer para n = m
3er Paso : Demostrar para n = m +1 utilizando 2do Paso
o
(A) Si P(n) = 7 n- 2 n  P(n) = 5
o
(B) Si P(n) = 11 n - 4 n  P(n) = 7
o
(C) Si P(n) = n3 - n  P(n) = 3
(D) Si P(n) = " 3n < n2 - 1 "  P(n) = V, indicando un n inicial
o
(E) Si P(n) = 2 4n - 1  P(n) = 15
(F) Si P(n)  " Sen nx  n Sen x x "
P(n) = V, indicando un n inicial

(G) Si P(n)  " 2 n  n ! "  P(n) =V indicando un n inicial
(H) Si P(n)  " n !  n2 "  P(n) = V, indicando un n inicial
1 1 1 1 13
(I) Si P(n)  "   ....  
n1 n2 n3 2n 24
⇒ P(n) = V, indicando un n inicial
1 1 1 1
(J) Para n  Z, sea Hn = 1+ + + + ..... + . Demuestre
2 3 4 n
n
por IM que 1+  H n n  N
2 2
n
1
(K) Para n  Z + Demostrar que  = H2n+1 - 0.5Hn
k=1 2k +1
n-1
Sen(2n x) n
Sen(2nx)
(L)  Cos2k-1x =
k=1 2n Sen(x)
(M)  Cos(2k - 1)x 
k=1 2Sen(x)
n(n - 1)
(N) P(n) = " n3 < 2n "  P(n) = V (O) P(n) = "n - 2 < "  P(n) = V
12
1
2. Halle una Fórmula para los siguientes problemas, y luego demuéstrelo
por Inducción Matemática:

n n n
(A) S(n) =   2k - 1 (B) S(n) =  k 4 (C) S(n) =  k 3
k =1 k =1 k =1
n-1 n 1 n
(D) S(n) =  2k (E) S(n) =  (F) S(n) =  (-1)k+1k 2
k=0 k =1
k(K + 1) k =1
n n n
k
(G) S(n) =  k(K + 1) (H) S(n) =  x (I) S(n) =  1+ 3(k - 1)
k =1 k=0 k =1
n n n
(J) S(n) = Ak (K) S(n) = Ak (L) S(n) =  1+ 3(k - 1)
k=1 k=1 k =1
(M) Si D(n) es el Número de Diagonales que pueden ser
trazados en un Polígono Convexo de "n" lados
(N) Si S(n) es la Suma de los ángulos interiores de un
Polígono Convexo de "n" lados.
(O) Si R(n) es la cantidad de regiones que n rectas, NO todas
convergentes en un mismo punto, divide a un círculo.
(P) S(n) = 1+ 21 + 22 + 23 + 2 4 + .... + 2n (Q) S(n) = 5 +10 +15 + 20 + 25 + .... + 5n
(R) S(n) = 1+ 5 + 9 +13 +17 + .... + (4n - 3) (S) S(n) = 14 + 2 4 + 3 4 + 4 4 + 5 4 + ..... +n4

Análisis Combinatorio y Técnicas de Conteo


m! m!
C o m b i n a c i ó n : C nm = P e r m.: P nm =
n ! ( m- n )! (m-n) !
P e r m. C i r c u l a r : ( m - 1 ) ! P r o c. E t a p a s = n n n .... n
1 2 3 k
m!
P e r m. d e e l e m. c o n r e p e t i c i o n e s =
n 1 ! n 2 ! n 3 ! .... n k !

3. ¿De cuántas formas pueden formarse palabras distintas, utilizando las


letras de la palabra CLASIFICACION?
4. Tenemos 6 alumnos del 1er. Ciclo, 5 del 2º, 4 del 3º, 3 del 4º, 2 del 5º y 1
del 6º, candidatos a recibir 5 premios de la Escuela de Sistemas de la
UTP. Uno al alumno menos charlatán, otro al más atento, otro al que
tiene mejor letra, otro al que asiste mas a las Tutorías y otro a l que
mejor maneje su auto. Suponiendo que ningún alumno puede recibir
más de un premio, ¿De cuántas formas se puede distribuir los premios?
y si no puede haber dos premios para un mismo curso ¿Cómo
responder la misma pregunta?

2
5. Un examen de admisión de cierta universidad, consta de 2 preguntas
para responder con V o F, 3 con 5 respuestas múltiples signadas como
A, B, C, D y E. ¿De cuántas formas se puede responder el examen?
6. ¿Cuántos números telefónicos de 5 dígitos tienen un dígito que aparece
más de una vez?
7. ¿De cuántas maneras se pueden colocar 4 neumáticos en un auto?
8. ¿Cuántas Palabras de longitud 3, sin repetir signos, pueden escribirse
con un alfabeto de 256 letras?, teniendo en cuenta que no deben
aparecer nunca juntos los símbolos “a” y “b”
9. Por un Canal de Comunicación, se va a transmitir un mensaje utilizando
12 símbolos diferentes. Además de estos 12 símbolos, el transmisor
también enviará un total de 45 espacios en blanco entre los símbolos,
con tres espacios como mínimo entre cada par de símbolos
consecutivos. ¿De cuántas formas se podrá enviar el mensaje?
10. Queremos alinear a ocho personas A, B, C, D, E, F, G y H de modo que A
y H estén en los extremos, B y C estén juntas y F y G estén separados.
¿De cuántas formas podremos podrá hacerlo?
11. Supongamos que en las manos de unos lingüistas cayó un texto escrito
mediante 26 signos desconocidos. Estos símbolos son letras que
representan uno de los 26 sonidos del idioma. ¿De cuántas maneras se
pueden hacer corresponder los sonidos a los signos del idioma?
12. Siete muchachas forman una ronda. ¿De cuántas maneras distintas se
pueden colocar en círculo?
13. Una sociedad científica esta formada por 25 personas. Es necesario elegir al
presidente de la sociedad, al vice-presidente, al secretario científico y al
tesorero. ¿de cuantas formas se puede efectuar esta elección, si cada
miembro de la sociedad puede ocupar sólo un cargo?
14. ¿De cuántas formas se pueden colocar en el tablero de ajedrez 8 torres
de modo que no se puedan comer una a la otra?
15. Se tienen n banderines de señales distintos y k mástiles, en los cuales
éstos se cuelgan. El sentido de la señal depende del orden en que están
colgados los banderines. ¿De cuántas maneras se los puede colgar, si
deben ser utilizados todos ellos, pero algunos mástiles pueden resultar
vacíos?
16. Cada celda de la memoria principal de la computadora tiene asignado
un nombre único conocido como su Dirección, el cual se representa con
una cadena de ceros y unos, a estos dígitos se les llama bits. Una
cadena de 8 bits es llamada un Byte. ¿Cuántas direcciones de celdas
de memoria se puede lograr con una computadora que utiliza
direccionamiento de:
A) Un Byte B) Dos Bytes C) Cuatro Bytes

3
Sistema de Numeración :
N = abcdefgn DIGITOS : b, c, d, e, f, g  0, 1, 2, 3, 4, 5, 6.....
BASE : n  2, 3, 4, 5, 6..... a  1, 2, 3, 4, 5, 6.....
a, b, c, d, e, f, g < n
N = a.n6 +b.n5 + c.n4 + d.n3 + e.n2 + f.n + g

17. Si un número N de tres cifras en base 9 se convierte a la base 7 viene


expresado por las mismas cifras pero en orden invertido. Hallar dicho
número en la base 8.
18. Un número escrito en bases consecutivas se escriben como 144 y 213.
Halle dicho número en la base decimal.
19. Se desea repartir $1 000 000 entre un cierto número de personas, de tal
modo que ellas reciban 1, 7, 49, 243,..., etc., y que no más de 6 personas
reciban la misma suma. Halle el número de beneficiarios.
20. Halle el número de términos de la siguiente sucesión:
860 , 959 , A 58 , B57 , C 56 ,.......
21. Si un número en la base 12 tiene tres cifras, ¿cuántas cifras tendrá en la
base 15?
22. Halle la suma de las cifras de un número de tres cifras pares que sea
igual a la suma de los seis números de dos cifras diferentes que se
pueden formar con dichas cifras.
23. A una persona se le pide que multiplique su edad por 2, sume 5 al
resultado, multiplique por 50 a lo obtenido reste 365 y finalmente le
sume un número entero de dos cifras que represente la cantidad de
soles, menor que 100, que tiene en el bolsillo. Si la respuesta es 1745
¿cuánto dinero tenía? y ¿cuál es su edad?
24. Al convertir un número de tres cifras del sistema Decimal al de base 9
se obtiene otro de tres cifras cuya escritura es igual a lo que le falta el
primero para ser 1000. Halle el menor de las cifras del número.
25. Hallar el mayor sistema de numeración donde se cumple que abn  ba5

26. Si los siguientes números están bien escritos hallar k+r 351k ; 4k2r ; r468

27. En que sistema de Numeración, existen 81 números de


la forma a b (a  2) (b  1) (b  2) a b b
28. Hallar en que sistema de Numeración 1 3 3 1 es un cubo per -
fecto.
29. En que sistema de Numeración, existen 144 números de
la forma a (a - 2) (b  2) b

4
30. Hallar, si es posible :
A) 213x en la base x +1 B) 0, 478 en la base 6
31. Hallar el MCM(A, B), si
A) A - B = 77 y los cocientes sucesivos obtenidos al hallar
su MCD por el Algoritmo de Euclides fueron 1, 3, 1, 4 y 2 .
B) A +B = 756 y los cocientes sucesivos obtenidos al hallar
su MCD por el Algoritmo de Euclides fueron 2, 1, 1 y 2 .
32. Convertir los siguientes números :
A) N = 1 011012 a la base 4, 8, 16
B) N = 3 012124 a la base 2, 8, 16
C) N = 5 076018 a la base 2, 4, 16
D) N = A 972CD0E16 a la base 2, 4, 8
33. Convertir los siguientes números :
A) N = 0.1 011012 a la base 4, 8, 16
B) N = 2. 3 012124 a la base 2, 8, 16
C) N = 4. 5 076018 a la base 2, 4, 16
D) N = 7. A 972CD0E16 a la base 2, 4, 8
34. Realizar las operaciones indicadas :
A) 1 011012 + 3 032124 B) 3012578 - 5076018
C) A 972CD0E16 * 6 D) 2 * 3012579 - 4 * 5076018 + 8 * 203401 5
E) 431678 + 251568 F) 101002 + 10102 + 11112 + 10112
G) 78049  45679 G) 53327 - 23357
35. Realizar las operaciones indicadas :
A) Si a +b + c = 21. Hallar S = abc +bca + cab
B) S = aaa 8 +bbb 8 + ccc 8 si a +b + c = 14
C) Si abc5 - cba5 = mn35 Hallar m2 +n2
D) Si abc5 - cba5 = mnp5 Hallar mmm7 + nnn7 +ppp 7
E) Hallar 2578 x368 F) 4135 x234 5
43215 7 837169
G) Hallar H) Hallar
67 79
23174 8 210313 4
I) Hallar J) Hallar
578 103 4
K) Hallar CA(257 ) + CA(5319 ) + CA(253418 ) en base 6
L) Hallar la suma de las cifras de 3426 x 555....555 6
30 cifras

5
36. Sea N un número de cinco cifras. Si a dicho número le colocamos un 7
a la izquierda se obtiene otro número que es quíntuplo del número que
se obtendría al colocar el 7 a la derecha.

37. Resuelva los siguientes problemas de Numeración:


A) Si MCD(a7a, 7b7) = 11 Hallar a +b
B) En los 1512 primeros números naturales ¿Cuántos son
o o
3 y no son 9
o o
C) Si M = 23+ 8 se divide entre N = 23+ 6 se obtiene como
o
cociente C = 13+ 6 y un residuo R = 5. ¿Cuántos valores
puede tomar el cociente, si C tiene tres cifras?
o o o
Sugerencia : Si D = A+h y D = B+h  D = MCM(A, B)+h.
o
D) Hallar el menor valor de abc tal que 3abc = 7+ 2.
o o
E) Hallar el menor N = 7+ 3 si 4N = 15+13
F) Si MCD(2A, 3B) = 90 y MCD(3A, 2B) = 15 hallar MCD(A, B)
G) Verificar la validez de MCD(A, C + AB) = MCD(A, C)

TABLERO DE EUCLIDES
DIV Q1 Q2 Q3 Q4 ……. ……. ……. Qn+1 Qn+2
A B R1 R2 R3 ……. ……. ……. Rn Rn+1
MOD R1 R2 R3 R4 ……. ……. Rn Rn+1 0

MCD (A, B) = Rn+1 MCM(A, B)*MCD(A, B) = A*B

38. Hallar por el Algoritmo de Euclides, el MCD de los números indicados


M, N y luego halle dos valores para a y b de modo que se cumpla la
ecuación mostrada en cada caso:
A) MCD(134, 32) = 134a + 32b a, b  Z
B) MCD(106, 38) = 106a + 38b a, b  Z
C) MCD(153, 57) = 153a + 57b a, b  Z
D) MCD(825, 315) = 825a + 315b a, b  Z
E) MCD(273, 110) = 273a + 110b a, b  Z
F) MCD(1400, 220) = 1400a + 220b a, b  Z

6
CRIPTOGRAFIA : Sistema RSA
er
1 PASO Leer p, q, n números primos
do
2 PASO Calcular z = p * q   = (p - 1) * (q - 1)
3 PASO Hallar s   0,   / (n * s) MOD  = 1
er

4 to PASO Cifrar mensaje M (letra por letra), usando fórmula : C = M n MOD z


5 to PASO Descifrar mensaje C (letra por letra), usando fórmula : M = C s MOD z
(z, n) CLAVES PUBLICAS
(s,  ) CLAVES PRIVADAS

39. Hallar el residuo de dividir:


A) 3828 entre 7 B) 1520 entre 4
C) 243200 entre 6 D) 19992002 entre 8
6
E) 230 - 1 entre 5 F) 45 entre 11
G) 5142020 entre 9 H) 278000 entre 10
G) 5142020 entre 9 H) 278000 entre 10

40. Utilizando propiedades de Aritmética Modular hallar:


A) 332202 MOD 11 B) 433336 MOD 33 C) 287146 MOD 8
D) 20042003 MOD 19 E) 4214236 MOD 13 F) 257120 MOD 7
G) 220240 MOD 7 H) 999200 MOD 5 I) 128764 MOD 23

41. Para p = 23, q = 31 hallar el valor de s.


A) n = 29 B) n = 13 C) n = 19 D) n = 31
E) n = 23 F) n = 17 G) n = 7 H) n = 11
I) n=5 J) n = 3 K) n = 37 L) n = 41

42. Utilizando los datos y el valor hallado en la pregunta anterior cifrar el


mensaje numérico M:
A) M = 572 B) M = 100 C) M = 2 D) M = 206
E) M = 235 F) M = 183 G) M = 51 H) M = 14
I) M = 36 J) M = 137 K) M = 78 L) M = 31

43. Utilizando los datos y el valor hallado en la pregunta 5 descifrar el


mensaje numérico C recibido por cierto receptor:

7
A) C = 47 B) C = 10 C) C = 52 D) C = 35
E) C = 138 F) C = 89 G) C = 21 H) C = 73
I) C = 114 J) C = 266 K) C = 102 L) C = 63

44. Para los valores de p = 11, q = 23 y n = 31, y utilizando los


Códigos ASCII halle el valor de s, cifre y descifre los mensajes
siguientes:
A) M = HOLA B) M = Hola C) M = Luis
D) M = Adios E) M = Chau F) M = OK
G) M = MARIA H) M = Lima I) M = Password
J) M = @hotmail.com K) M = Perú_21 L) M = 127ºNO

8
1.1 Algoritmos
Escribir un programa de ordenador para resolver un problema comprende varios pasos que van
desde la formulación y especificación del problema, el diseño de la solución, su implementación,
prueba y documentación, hasta la evaluación de la solución. Según Aho, Hopcroft y Ullman [1], “la
mitad del trabajo es saber qué problema se va a resolver”. En general, se puede recurrir a casi
cualquier rama de las matemáticas y de las ciencias para obtener un modelo de cierto tipo de
problemas. Cuando ya se cuenta con un modelo matemático adecuado del problema, puede
buscarse una solución en función de ese modelo. El objetivo inicial consiste en hallar una solución
en forma de algoritmo, que es una secuencia finita de instrucciones, cada una de las cuales tiene
un significado preciso y puede ejecutarse con una cantidad finita de esfuerzo en un tiempo finito.
Las instrucciones de un algoritmo pueden ejecutarse cualquier número de veces, siempre que ellas
mismas indiquen la repetición. No obstante, se exige que un algoritmo termine después de ejecutar
un número finito de instrucciones sin importar cuáles fueron los valores de entrada. Así, un
programa es un algoritmo mientras no entre en un ciclo infinito con ninguna entrada.

Según G. Heileman [37] “un algoritmo es cualquier procedimiento computacional bien


definido, junto con un conjunto de datos de entrada permitidos, que produce un valor o conjunto de
valores como salida”.

Es importante reconocer la diferencia entre un problema y un algoritmo que resuelve un


problema. Un problema tiene un solo enunciado que lo describe en ciertos términos generales; sin
embargo, puede haber muchas formas diferentes de resolver un problema, y algunas de las
soluciones pueden ser más eficaces que otras.

1.1.1 Eficiencia o complejidad de los algoritmos


La resolución de un determinado problema se puede lograr por medio de diferentes algoritmos lo
cual implica la necesidad de elegir el mejor entre ellos y, por tanto, se han de evaluar los recursos
que requiere cada algoritmo para su ejecución. A este proceso de evaluación de los recursos se le
denomina cálculo de la eficiencia o complejidad de un algoritmo. Se dice que un algoritmo es más
eficiente o de menor complejidad que otro cuando utiliza menos recursos.

Los principales recursos que suelen tenerse en cuenta a la hora de evaluar la eficiencia de
un algoritmo son el espacio de memoria que necesita y el tiempo de ejecución. La eficiencia en
memoria o complejidad espacial de un algoritmo indica la cantidad de almacenamiento necesario
para ejecutar el algoritmo; es decir, el espacio de memoria que ocupan todas las variables
utilizadas por el algoritmo. Suele ser fácil calcular la memoria estática de un algoritmo, ya que sólo
hay que sumar la memoria ocupada por todas las variables declaradas en el algoritmo. Sin

9
embargo, el cálculo de la memoria dinámica no es tan fácil, debido a que ésta depende de cada
ejecución concreta del algoritmo. La eficiencia en tiempo o complejidad temporal de un algoritmo
indica el tiempo que requiere para su ejecución.

La eficiencia en tiempo y espacio son objetivos contrapuestos por ser, generalmente, la


optimización de uno de ellos a costa del otro. El programador es quien debe establecer la relación
adecuada entre espacio y tiempo, para lo cual ha de tener en cuenta el uso pretendido del
algoritmo y los recursos disponibles.

En este trabajo, aunque se darán algunos resultados de complejidad espacial, se abordará


primordialmente el estudio de la eficiencia temporal.

El incesante aumento de la capacidad que poseen los nuevos ordenadores, tanto en


velocidad de cálculo, como en almacenamiento de memoria, no implica que se tenga que desechar
el estudio de la eficiencia de los algoritmos, ya que un mal algoritmo ejecutado en un ordenador
muy potente puede tardar mucho más que otro algoritmo mejor que se ejecute en otra máquina
menos potente.

Hay tres factores que influyen en el cálculo de la complejidad temporal: el tamaño de los
datos de entrada, el contenido de los datos de entrada, y el ordenador y el código generado por el
compilador, siendo el más importante, para medir la eficiencia de un algoritmo, el referente al
tamaño de los datos de entrada. El tamaño de un ejemplar x se corresponde formalmente con el
número de dígitos binarios necesarios para representarlo en el computador. No obstante lo
anterior, se suele identificar el tamaño con el número de elementos lógicos contenidos en el
ejemplar. Por ejemplo, un problema consistente en ordenar n enteros será considerado de tamaño
n, aunque se necesite en la práctica más de un dígito binario para representar cada entero.
Cuando se trate de problemas numéricos, como el cálculo del factorial de un número, la eficiencia
se expresará en función del valor del dato considerado y no en función de su tamaño (que sería la
longitud de la representación binaria de dicho valor).

En relación con el segundo factor, el contenido de los datos de entrada, hay dos
estrategias posibles en el cálculo de la complejidad temporal: estudiar la eficiencia en el caso peor
y el estudio de la eficiencia en el caso medio. La primera de las estrategias consiste en, fijado un
tamaño del problema, analizar la eficiencia del algoritmo en aquellas situaciones en las que emplea
más tiempo y teniendo como objetivo la obtención de una cota superior del tiempo de ejecución del
algoritmo. El estudio de la eficiencia en el caso medio plantea la necesidad de conocer el tiempo
de ejecución del algoritmo en todas las situaciones y la frecuencia con que éstas se presentan; es
decir, su distribución de probabilidades. Esta distribución suele ser difícil de conocer, por lo que

10
han de realizarse hipótesis cuya fiabilidad es discutible. Además, las operaciones matemáticas
necesarias para realizar el cálculo pueden llegar a hacer éste impracticable en muchos casos. Por
todo ello, el análisis del caso medio es menos frecuente que el estudio del caso peor. En el
presente trabajo siempre se realizará el análisis de la eficiencia en el peor de los casos.

El tercer factor, el ordenador y el código generado por el compilador, no suele tenerse en


cuenta a la hora de calcular la eficiencia en tiempo de un algoritmo de un modo totalmente
independiente de las máquinas y lenguajes existentes, y a que, por otro lado, se acepta el principio
de invariancia: diferentes implementaciones de un mismo algoritmo diferirán en sus tiempos de
ejecución a lo sumo en una constante multiplicativa positiva, para problemas de tamaño
suficientemente grande. Más precisamente, si t1(n) y t2(n) son los tiempos de ejecución de dos
implementaciones, siempre existe un número real positivo c y un número entero n0 tales que, para
todo n  n0, se verifica que t1(n)  ct2(n). Por ejemplo, un factor constante de
10, 100 ó 1000 en los tiempos de ejecución no se considera en general importante frente a una
diferencia en la dependencia del tamaño n del problema, ya que, para un tamaño suficientemente
grande, es dicha dependencia quien establece la dependencia real.

Ahora bien, es preciso indicar que existen tres enfoques metodológicos para evaluar la
eficiencia de los algoritmos:
Empírico o a posteriori: los algoritmos se implementan en un ordenador y se comparan mediante la
realización de pruebas con datos del problema de distinto tamaño.

Teórico o a priori: se determina, matemáticamente, la cantidad de recursos necesitados por cada


algoritmo como una función cuya variable independiente es el tamaño de los datos del
problema.

Híbrido: se determina teóricamente la función que describe la eficiencia de un algoritmo y luego se


calculan empíricamente los parámetros numéricos requeridos por un programa y ordenador
concretos. Este enfoque permite hacer predicciones, mediante extrapolación, sobre el
tiempo que tardaría en ejecutarse un algoritmo en una implementación concreta con unos
datos mucho más grandes que los usados en las pruebas.
El segundo enfoque es el más interesante, porque ofrece una medida independiente
del ordenador, el lenguaje de programación y la capacidad del programador. Ahorra, por un
lado, el tiempo que se tardaría en programar, sin necesidad, un algoritmo ineficiente y, por
otro lado, el tiempo del ordenador que se desperdiciaría probándolo. Además, permite
estudiar la eficiencia de un algoritmo cuando es usado con datos de cualquier tamaño,
mientras que con los enfoques empírico o híbrido, las consideraciones prácticas pueden
forzar a probar los algoritmos sólo con datos de tamaño moderado. Esta última reflexión es
muy importante ya que muchos algoritmos comienzan a ser eficientes, en comparación con
otros, cuando se usan con datos de gran tamaño.

11
Debido a lo anterior, aquí se va a utilizar un enfoque teórico o a priori como método para
evaluar la complejidad temporal de un algoritmo considerándose, como factor principal, el tamaño
de los datos de entrada, aunque también se tendrá en cuenta el factor relativo al contenido de los
datos de entrada cuando éstos reflejen el peor de los casos posibles.

Puesto que, como se ha indicado, el cálculo de la complejidad temporal


de un algoritmo se realiza en función del tamaño del problema, resulta que
si f : N  R+  {0} es la función que indica cuánto tarda en ejecutarse un algoritmo, entonces f (n)
denota el tiempo cuando el tamaño del problema es n. La eficiencia de los algoritmos se hace
mediante un estudio de f (n) para valores de n suficientemente grandes, lo cual se denomina
análisis asintótico. Para poder realizar dicho estudio se requiere de la utilización de las notaciones
asintóticas, las cuales establecen unas cotas superiores o inferiores del tiempo de ejecución de un
algoritmo: O () que da una cota superior, () que proporciona una cota inferior y la notación ()
que establece, simultáneamente, una cota inferior y superior.

El conjunto de las funciones del orden de f (n), denotado por O ( f (n)), viene dado por
O( f (n)) = {g: N  R+ : c  R+, n0  N, n  n0 g(n)  cf (n)}.
La definición de O ( f (n)) garantiza el principio de invariancia descrito anteriormente; es decir, si el
tiempo de ejecución de una implementación concreta de un algoritmo está descrito por una función
g(n) del orden de f (n), el tiempo g'(n) empleado por cualquier otra implementación del mismo que
difiera de la anterior en el lenguaje, el compilador, y/o la máquina empleada, también será del
orden de f (n). En general, se dirá que el tiempo de ejecución de un algoritmo (y, por tanto, de
todas sus implementaciones) es del orden de f (n).

El conjunto O ( f (n)) define un orden de complejidad y se escogerá, como representante, la


función f (n) más sencilla posible dentro del mismo. De esta forma se tiene, por ejemplo, que O(n)
representa el orden de complejidad lineal O(n2) el de complejidad cuadrática y O(1) el de las
funciones constantes.

El conjunto de las funciones ( f (n)) viene dado por


( f (n)) = {g: N  R+ : c  R+, n0  N, n  n0 g(n)  cf (n)}.
Las notaciones O( f (n)) y ( f (n)) son independientes de que el análisis sea en el caso peor o en
el caso medio. Si t(n) representa el tiempo de ejecución de un algoritmo y t(n)  ( f (n)), entonces
la medida de ( f (n)) no se refiere al mejor tiempo del mismo, sino a una cota inferior de t(n). Si se
realiza un análisis en el peor caso, t(n) representa el tiempo del peor ejemplo de tamaño n,
mientras que f (n) es una cota inferior del mismo.

12
Obsérvese que hay una asimetría entre las medidas de O( f (n)) y ( f (n)). La primera
establece una cota superior al peor caso y, por tanto, a todos los ejemplos de tamaño n, mientras
que la segunda, al establecer una cota inferior al peor caso, permite que puedan existir infinitos
ejemplos de tamaño n con un tiempo mejor que
f (n). Ahora bien, se verifica que
f (n)  O(g(n))  g(n)  ( f (n)),
denominándose, a esta equivalencia, regla de dualidad.
El conjunto de las funciones del orden exacto de f (n), denotado por ( f (n)), se define
como
( f (n)) = O( f (n))  ( f (n)),

Nótese que esta definición es equivalente a

( f (n)) = {g: N  R+ : c,d  R+, n0  N, n  n0 df (n)  g(n)  cf (n)}.

Lógicamente, la notación () es más precisa que las notaciones O() y (), ya que
g(n) está en el orden exacto de f (n) (g(n)   (f (n)) si, y sólo si, f (n) es a la vez cota inferior
y superior de g(n).

A continuación, se indican algunas propiedades de la notación O() (para un estudio


exhaustivo, consúltese [28]). Si f, g, h : N  R+  {0}, entonces se verifica
(1) f (n)  O( f (n)).
(2) Si f (n)  O(g(n)) y g(n)  O(h(n)), entonces f (n)  O(h(n)).
(3) Si g(n)  O( f (n)) y f (n)  O(g(n)), entonces O( f (n)) = O(g(n)).
(4) Regla del máximo: O( f (n) + g(n)) = O(max ( f (n), g(n))).

Las tres primeras propiedades definen una ordenación parcial en el conjunto de las
funciones y, consecuentemente, en el conjunto de las eficiencias relativas de los diferentes
algoritmos para resolver un problema dado. Por otro lado, puede observarse que la regla del
máximo (o de la suma) permite simplificar drásticamente el cálculo de la eficiencia de un algoritmo.

Otra propiedad importante es la regla del límite que se enuncia a continuación.


f ( n)
(a) lim  l  R+  f (n)  O(g(n)) y g(n)  O( f (n)).
n  g ( n)
f ( n)
(b) lim  0  f (n)  O(g(n)) y g(n)  O( f (n)).
n  g ( n)
f ( n)
(c) lim    f (n)  O(g(n)) y g(n)  O( f (n)).
n  g ( n)

13
Una consecuencia inmediata de la regla del límite es que todo polinomio en n de grado m
cuyo coeficiente de mayor grado sea positivo es del orden de nm.
Las funciones de complejidad algorítmica más usuales, ordenadas de mayor a menor
eficiencia (o de menor a mayor complejidad), son

O(1)  O( log n)  O(n)  O(n log n)  O(n2)  O(2n)  O(n!)

Las dos últimas complejidades forman parte de las complejidades super-polinómicas o


intratables, mientras que las restantes pertenecen al grupo de complejidades polinómicas.

A la hora de evaluar la eficiencia de un algoritmo se han de tener en cuenta las siguientes


consideraciones.

El hecho de que un algoritmo tenga una eficiencia que sea "buena" en términos generales
no implica que lo sea en términos particulares, ya que puede haber otro algoritmo que resuelva el
mismo problema de una forma más eficiente.

El que un problema P se resuelva mediante un algoritmo A con una eficiencia lineal no


implica que dicho algoritmo sea necesariamente el mejor, ya que puede haber otro algoritmo B con
una eficiencia logarítmica que también resuelva dicho problema.

Si se comparan las eficiencias de dos algoritmos, se ha de tener en cuenta que el cálculo


del orden de complejidad es una medida asíntotica; es decir, se realiza un estudio teórico para
valores de n suficientemente grandes. Puede ocurrir que un algoritmo tenga una eficiencia
asintótica peor que la de otro, pero que tenga un mejor rendimiento para valores pequeños de n.
Además, si el tamaño de los datos del problema es reducido, entonces no se puede despreciar el
valor de las constantes multiplicativas, ya que pueden afectar bastante a la eficiencia de los
algoritmos. Por ejemplo, si se supone que un problema se puede resolver mediante dos algoritmos
diferentes cuyas funciones de complejidad son, respectivamente, f (n) = n3 – 3n2 + 10 y g(n) =
100n2 log n + 10, la primera función posee complejidad asintótica peor que la segunda, pero posee
un mejor rendimiento para valores de n menores que 651. Por tanto, si el tamaño de los datos del
problema es inferior a 651, entonces conviene utilizar el primer algoritmo aunque su
comportamiento asintótico sea peor que el del segundo algoritmo.

Los aspectos que se han tratado en esta sección se refieren a conceptos preliminares de
Algoritmia, la cual se ocupa del diseño y análisis sistemático de algoritmos específicos, cada uno
de los cuales será más eficiente que sus predecesores para resolver algún problema dado. Un
campo diferente al de la Algoritmia es el de la Complejidad Computacional. Este campo, que tiene

14
una trayectoria paralela al de la Algoritmia, considera globalmente todos los posibles algoritmos
para resolver un problema dado. Esto incluye aquellos algoritmos en los que ni siquiera se ha
pensado todavía.

Empleando la Algoritmia, se puede demostrar, expresando y analizando un algoritmo


explícito, que el problema objeto de estudio se puede resolver en un tiempo que está en O( f (n))
para alguna función f (n) que se intenta reducir lo más posible. Por otra parte, al emplear la
complejidad se pretende hallar una función g(n) tan grande como sea posible para la cual se
pueda demostrar que cualquier algoritmo capaz de resolver correctamente el problema, en todos
sus casos, debe requerir un tiempo que esté en (g(n)). A esta función g(n) se le da el nombre de
cota inferior de la complejidad del problema.

Por último, es preciso indicar que en este trabajo de investigación se van a describir
algoritmos para resolver problemas relativos al cálculo de valores en juegos cooperativos,
analizando la eficiencia de dichos algoritmos en el contexto de la Algoritmia.

Algoritmo potencial (N, v)


P(0 , v)  0
para i de 1 hasta n


 n
 para j de 1 hasta  
  i

  P ( S j , v )  1 v ( S j )  
 i 
S i j 
i  P ( S i
j
\ k , v ) 

k  Si j 


 fin_para


fin_para

Proposición 2.4 Sea (N, v) un juego cooperativo. El cálculo de la función de potencial de Hart y
Mas-Colell para todos los subjuegos del juego (N, v) requiere un tiempo (n2 ).
n

Demostración: El tiempo de ejecución del algoritmo potencial es


t(potencial) = 1 + t(bucle 1)
n
=1+  t (bucle 2)
i 1
 n 
n i 
= 1   t (asignación)
i 1 j 1

15
 n 
n i 
= 1   (1  t (suma))
i 1 j 1
 n 
n

i  i

= 1   
i 1 j 1 
1   1
k 1 
 n 
n i 
= 1   (1  i)
i  1 j 1
n  n
= 1  (1  i) i 
i 1  
n  n
=  (1  i) i 
i 0  
= n2 n 1
 2n .
+ 2  (n2 ).
n-1 n n
De aquí, t(potencial) = f (n) = n2

Algoritmo dividendo (N, v)


v (0 )  0
para i de 1 hasta n


 n
 para j de 1 hasta  
  i
  ( S j )  v( S j )
 v i i   v (T )
T  Si j



 fin_para


fin_para
donde S i es la j-ésima coalición de tamaño i, Si  i .
j j

Tal como se recoge en la siguiente proposición, la complejidad temporal de este algoritmo


es de orden exponencial.

Proposición 2.7 Sea un juego cooperativo (N, v). El cálculo de todos los dividendos de
Harsanyi requiere un tiempo (3 ).
n

Demostración: De la descripción del algoritmo dividendo, se deduce que el tiempo de


ejecución verifica
t(dividendo) = 1 + t(bucle1)
n
= 1  T (bucle2)
i 1

16
 n 
n i 
= 1   t (asignación)
i 1 j 1
 n 
n i 
= 1   (1  t (suma))
t 1 j 1
 n 
n i  2i 1
= 1   (1   1)
i 1 j 1 k 1
 n 
n i 
= 1   (1  2
i 1 j 1
i
 1)
 n 
n i 
= 1 2
i 1 j 1
i

n  n
= 1  2  i 
i

i 1  
n  n
=  2i    3n .
i 0 i 
Por tanto, t(dividendo) = f (n) = 3n  (3n).

Proposición 3.16 Sea la terna (N, v, G), donde G es un grafo camino y (N, v) un juego de
utilidad transferible. El cálculo de todos los dividendos de Harsanyi del juego restringido
requiere un tiempo (n4).

Demostración: Para el cálculo de los dividendos se utiliza el algoritmo dividendo descrito en la


sección 2.2.2. Como ahora se consideran únicamente las coaliciones factibles, el número de
coaliciones de tamaño i viene dado por S(i) = n – i + 1, y el número total de coaliciones factibles
i2  i
contenidas estrictamente en una coalición factible T de tamaño i es C (i )  . Por tanto, el
2
tiempo de ejecución del algoritmo es
t(dividendo) = 1 + t(bucle1)
n S (i )
= 1   t (asignación)
i 1 j 1
n S (i )
= 1   t (1  t (suma))
i 1 j 1
n S (i ) C (i )
= 1   (1   1)
i 1 j 1 k 1
n S (i )
= 1   (1  C (i))
i 1 j 1
n
i2  i
= 1  (1 
i 1 2
) S (i)

17
n
i2  i  2
= 1 (
i 1 2
)(n  i  1)
n
1
= 1
2
 (i
i 1
2
 i  2)(n  i  1)

 (2  2n)  (n  1)i  ni  i3 


n
1
= 1 2

2 i 1

1 n n n n

= 1  (2  2n) 1  (n  1) i  n i 2   i 3 
2 i 1 i 1 i 1 i 1 
1 n n
2
n(n  1)(2n  1) n 2 (n  1) 2 
= 1   (2  2n)n  (n  1) n  
2 2 6 4 
1 n  n (n  n )(2n  1) (n  2n  n ) 
3 3 2 4 3 2
= 1   2n  2n 2    
2 2 6 4 
1 n3  n 2n 4  3n3  n 2 n 4  2n3  n 2 
= 1  2n  2n 
2
  
2 2 6 4 
1 24n  24n  6n  6n  4n  6n  2n  3n  6n  3n 2
2 3 4 3 2 4 3
= 1
2 12
n 4  6n3  23n 2  18n  24
= .
24

Por tanto, t(dividendo) = f (n)  (n4).

Algoritmo dividendo2

para i de 1 hasta n


 para j de 1 hasta S (i )


Si j  T
   vG ( S i j )  (-1) v(T )
 {T : Si j ex ( Si j )  T  Si j }


 fin_para


fin_para

donde S i j es la j-ésima coalición de tamaño i y S(i) es el número de coaliciones de tamaño i.

La complejidad temporal de este algoritmo se analiza en la proposición siguiente. En este


análisis se considera un almacenamiento previo, en una tabla, de los extremales de cada
coalición conexa.

Proposición 3.30 Sea la terna (N, v, G) donde G es un árbol y (N, v) un juego de utilidad
transferible. El cálculo de todos los dividendos de Harsanyi del juego restringido requiere un

18
tiempo O(2 |F|), donde F es el conjunto de coaliciones conexas en el árbol y D = max({|ex(S) :
D

S  F}).

Demostración: De la descripción del algoritmo dividendo2 se deduce que su tiempo de


ejecución es
t(dividendo2) = 1 + t(bucle1)
n
= 1  t (bucle2)
i 1
n S (i )
= 1   t (asignación)
i 1 j 1
n S (i )
= 1   t (suma)
i 1 j 1
n S (i )
 2  2
ex ( Si j )
= 1
i 1 j 1
n S (i )
= 1 2  2
i 1 j 1
D

n S (i )
= 1  2 D 1 1
i 1 j 1

< 1 2 D 1
F.
Por tanto, t(dividendo2) = f (n)  O(2D |F |).

Función banzhafTwoPower(pesos1,pesos2,q,p)

{pesos1: lista de n enteros; pesos2: lista de n enteros; q: entero;


p: entero}

19
para i de 1 hasta n
lista_aux  borra({w ,..., w }, w )
 1 n i

lista _ aux  borra({ p1 ,..., p n }, pi )


 n
 Bi ( x, y ) 
 
w j lista _ aux1
(1  x w j y p j )
 p j  lista _ aux2

  n w( N \ i ) p ( N \ i )

 Bi ( x, y )   (1  x y )    bkri x k y r 
wj pj

  j  1, j  i k 0 r 0 
coefi  coeficient es de Bi ( x, y )

 {coefi es una matriz de orden ( w( N \ i )  1)  ( p( N \ i )  1)}
s1i  Sumacoefi k , r , con k desde q  wi  1 hasta w( N \ i )  1, y con r

 desde p  pi  1 hasta p( N \ i ) 1
  i w( N \ i ) p( N \ i)

 s1    bkri 
  k  q  wi r  p  p i 
 i
s 2  Sumacoefi k , r , con k desde q  1 hasta w( N \ i )  1, y con r
 desde p  1 hasta p( N \ i ) 1

  i w( N \ i ) p ( N \ i ) i 
 s 2    bkr 
  k q r p 
  s i  s i
 i 1 2

fin para

n
   i
i 1

para i de 1 hasta n
   / 
 i i

fin para
devolver {1, . . . , n}
Proposición 4.26 Sea (N, v) un juego de votación con doble mayoría, siendo
v = v1  v2, con v1  q; w1 ,..., wn  y v2   p; p1 ,..., pn  . El cálculo del índice de Banzhaf
normalizado de todos los jugadores, con la función banzhafTwo-Power, requiere un tiempo
O(n2c), siendo c el número de coeficientes no nulos del polinomio B(x, y).

Demostración: En esta situación, el orden de complejidad de la función f (n), que determina el


tiempo de ejecución de la función banzhafTwoPower, viene dado por
O( f (n))  O(t (bucle1)  t (asignación )  t (bucle 2))
 O(max( t (bucle1), n, 2n))
 O(t (bucle1)) .
Ahora bien,
O(t (bucle1))  (n(t (asignación1)  ...  t (asignación 7)))
y, teniendo en cuenta que

20
O(t (asignación1)  O(t (lista _ aux1))  O(1) ,
O(t (asignación 2)  O(t (lista _ aux2))  O(1)
O(t (asignación3)  O(t ( polinomio ))  O(nc),
O(t (asignación 4)  O(t (coefi ))  O(c) ,
O(t (asignación 5)  O(t (suma1))  O(c) ,
O(t (asignación 6)  O(t (suma2))  O(c)
O(t (asignación 7)  O(t (diferencia ))  O(1)
resulta ser
O( f (n))  O(t (bucle1)  O(n t (asignación 3)) .
Por tanto, finalmente,
O( f (n))  O(n t (asignación 3))  O(n2c) .

Función ssTwoPower(pesos1, pesos2, q, p)


{pesos1: lista de n enteros; pesos2: lista de n enteros; q, p: enteros}

21
para i de 1 hasta n
lista_aux1  borra({w ,..., w }, w )
 1 n i

lista _ aux 2  borra({ p1 ,..., pn }, pi )


 n
 S i ( x, y , z ) 
 
w j lista _ aux1
(1  x w j y p j z )
 p j lista _ aux2

  n w ( N \ i ) p ( N \ i ) n 1

  S i ( x , y , z )   (1  x wj p j
y z )     i
akrj xk yr z j 
  j 1, j  i k 0 r 0 j 0 
coefi  coeficient es de Si ( x, y, z )
 {coefi es una matriz que almacena los coeficient es del polinomio,

 n 1

 coefi ( k  1 , r  1 )   i
akrj z j}
 j 0

s1i  Sumacoefi k , r , con k desde q  wi  1 hasta w( N \ i )  1, y con r



 desde p  pi  1 hasta p ( N \ i ) 1
  i w ( N \ i ) p ( N \ i ) n 1



1s ( z )     i
akrj zj
 k  q  wi r  p  pi j  0 
 i
s 2 ( z )  Sumacoefi k , r , con k desde q  1 hasta d w  1, y con r
 desde p  1 hasta d p  1

  i w ( N \ i ) p ( N \ i ) n 1

 s2 ( z )     akrj z 
i j

  k q r  p j 0 
g ( z )  s i ( z )  s i ( z )
 i 1 2

  n 1 
  i
g ( z )   d ij z j 
  j 0 
 n 1
 i   d ij j!(n  j  1)! / n!
 j 0

fin_para
devolver {1, . . . , n}

Proposición 4.33 Sea (N, v) un juego de votación con doble mayoría, siendo
v = v1  v2, con v1  q; w1 ,..., wn  y v2   p; p1 ,..., pn  . El cálculo del índice de Shapley-
Shubik de todos los jugadores con la función ssTwoPower requiere un tiempo O(n2c), siendo c el
número de coeficientes no nulos del polinomio S(x, y, z).

Demostración: Sea f (n) la función que determina el tiempo de ejecución de la función


ssTwoPower. Se verifica que
O( f (n)  O(t (bucle ))  O(n(t (asignación1)  ...  t (asignación8)) .
Ahora bien,
O(t (asignación1)  O(t (lista _ aux1))  O(1) ,
O(t (asignación 2)  O(t (lista _ aux2))  O(1)

22
O(t (asignación3)  O(t ( polinomio ))  O(nc),
O(t (asignación 4)  O(t (coefi ))  O(c) ,
O(t (asignación 5)  O(t (suma1))  O(c)
O(t (asignación 6)  O(t (suma2))  O(c) ,
O(t (asignación 7)  O(t (diferencia ))  O(n) ,
O(t (asignación8)  O(t (suma1))  O(n 2 ) .

Por tanto,
O( f (n))  O(n(t (asignación 3)))  O(n(nc))  O(n 2 c) .

Algoritmo geomdiv (pesos, q)


{pesos: lista de n enteros; q: entero}
 v L ()  0

para p de 1 hasta | L |
lista_aux  ex ( S )
 p
 n
 PS p ( x, z )  x

w( S p \ ex(Sp )) | S p \ ex(Sp ) |
z 
ilista _ aux
(1  x wi z )

  w( S p ) |S p | 
  PS p ( x, z ) 

  S
bkj p x k z j 

 k  w( S p \ ex(Sp )) j | S p \ ex(Sp ) |
 | ex( S p ) |

C S p   ar p z | S p |  r
S

 r 0
  
| ex( S p ) | w( S p )
 | S |  r |ex( S p )| S p | S |  r 

  Sp

C ( z )   r 0 
 b
Sp
kr  z

p
 ar z p 

  k q r 0

 ( S )  (1)| S p | C (1)
 vL p Sp

fin_para

Proposición 5.9 Sea la terna (N, v, L), donde (N, L) es una geometría convexa de partición
y (N, v), con v = [q; w1, . . ., wn], un juego simple de votación ponderada. El cálculo de los
dividendos, mediante el algoritmo geomdiv, requiere un tiempo
O(|L| D E), siendo
D = max{|ex(S)|: S  L} y
E = max{min(2|ex(S)|, |ex(S)|w(ex(S)) + 1) : S  L}.

23
Demostración: Sea f(n) la función que determina el tiempo de ejecución del algoritmo
geomdiv. Entonces, el orden de la complejidad de la función f(n) viene dado por
O(f(n)) = 1 + O(t(bucle)) = O(|L|(t(asignación1) + . . . + t(asignacion4))).
Ahora bien, dentro del bucle, la complejidad de la primera asignación sería
O(t(asignación1)) = O(t(lista_aux)) = O(1),
ya que se supone que los extremales se han calculado previamente, y se encuentran
almacenados. Para la complejidad de la segunda asignación, se tiene que, en el peor caso,
O(t(asignación2)) = O(t(polinomio) ) = O(D E),
lo cual es consecuencia de la Proposición 5.8. Del mismo modo, y considerando el peor
caso,
O(t(asignación3)) = O(t(suma)) = O(E),
al ser E una cota superior del número de coeficientes no nulos de cualquier polinomio P S(x,
z). Análogamente, teniendo en cuenta que, para toda coalición SL, la evaluación de los
polinomios CS(z), que son de grado |ex(S)|, en z = –1, se realiza en un tiempo O(|ex(S)|), y
|ex(S)|  D, resulta ser
O(t(asignación4) = O(D).
Finalmente, si se considera la regla del máximo de O(.), se sigue que,
O(f(n)) = O(|L|(t(asignación2))) = O(|L| D E ).

Función MyersonStar(pesos, q)
{pesos: lista de n enteros; q: entero}
para l de 1 hasta n – 1
(l; x, z )  x wl z (1  (i | l; x, z ))

(l; x, z)   k 0  jN
ckjl x k z j 
n
( j  1)! (n  j )!  q 1 wl l 
l     ckj 
 
j 2 n!  k q 
fin_para
n 1
(n; x, z )  x wn z (1  x w j z )
j 1

(n; x, z)   k 0  jN
ckjn x k z j 
24
n
( j  1)! (n  j )!  w( N ) n 
n     ckj 
 
j 2 n!  k q 
devolver {1, . . . ,n}
Proposición 5.26 Sea la terna (N, v, G), donde G es un grafo estrella y (N, v), con
v  q; w1 ,..., wn , un juego de votación ponderada. El cálculo del valor de Myerson de
todos los jugadores con la función MyersonStar requiere un tiempo O(n2c), siendo c el
número de coeficientes no nulos del polinomio G ( x, z ) .

Demostración: Sea f (n) la función que determina el tiempo de ejecución de la función


MyersonStar. Entonces, se verifica
O( f (n))  O(t (bucle )  t (asignación3)  t (asignación 4))
y, además
O(t (bucle ))  O((n  1)(t (asignación1)  t (asignación 2)))) .
Ahora bien, por las Proposiciones 5.24 y 5.25, se verifica que
O(t (asignación1))  O(t ( polinomio ))  O(r h ) ,
donde r es el factor de ramificación y h la altura del grafo estrella. Como, en el bucle, el
árbol se enraíza en un nodo que no es el central, entonces r = n – 2 y h = 2. Por tanto,
O(t (asignación1))  O(n 2 ) .
Por otra parte,
O(t (asignación 2))  O((n  1)(t (coefi )  t (suma1))) ,
teniéndose que O(t (coefi ))  O(n) , pues los factoriales se calculan en tiempo lineal, y
O(t (suma1))  O(c) , donde c es el número de coeficientes no nulos del polinomio
G ( x, z ) y constituye una cota superior del número de coeficientes no nulos de los
polinomios ( p; x, z ) , con p  N. Por tanto, al ser c  n,

O(t (asignación 2))  O(n2  nc)  O(nc) .


De lo anterior se deduce que el tiempo de ejecución del bucle es
O(t (bucle ))  O((n  1)t (asignación1)  n t (asignación 2)) .

 O(n3  n2c)

 O(n2c) .
Las asignaciones restantes, que se refieren al nodo central, verifican, por un lado,

25
O(t (asignación3))  O(t ( polinomio ))  O(r h )  O(n)
ya que, para el vértice central, r = n – 1 y h = 1. Por otro lado,
O(t (asignación 4))  O(n(t (coefi )  t (suma2)))

 O(n2  nc)
 O(nc) .

Finalmente, resulta O( f (n))  O(max( n2c, n, nc))  O(n2c) .

26

Anda mungkin juga menyukai