Sunteți pe pagina 1din 8

!"#$%$ $' %()'"$#*%+', -)#(.

/0)%12%
3'45%, 67894.:;)'8<=7<
>%.)#4:?%, 7=@6==<
A/B;)', C:%" -%)?/D E/))'D FG)'*

E#B' -/B(?'H#.I

Ls la medlda de la canLldad de Llempo requerldo para e[ecuLar un algorlLmo.

J#0 9 A/.%.#/" K9 LM 9)$') /1N

noLacln usada comunmenLe para descrlblr la Lasa de creclmlenLo del Llempo de
e[ecucln o uso de memorla usada por un algorlLmo.

usualmenLe descrlbe el peor caso del Llempo de e[ecucln de un algorlLmo.

-/B(?'+#$%$ '" %?0/)#.B/D




! -/"D.%". E#B' LM 9K7N

Se neceslLa una canLldad de Llempo fl[a para e[ecuLar un programa o algorlLmo. no
dependen del numero de lnpuLs o enLradas.

or e[emplo, cuando en un lengua[e se qulere escrlblr una funcln que reLorne falso o
verdadero basado en el valor del prlmer elemenLo de un arreglo. Ll programa neceslLa de
enLrada un arreglo con enLeros. Sl el prlmer enLero del arreglo en mayor que 0, la funcln
regresa verdadero, en cualquler oLra condlcln, la funcln regresa falso.

Ln esLe e[emplo, el Llempo de e[ecucln de la funcln no depende del numero de
elemenLos. LsLe solo checa el prlmer elemenLo y regresa el resulLado. A la funcln no le
lmporLa sl el arreglo Llene un enLero o un mllln de enLeros. ue esLo podemos declr que el
Llempo de e[ecucln de esLa funcln es consLanLe.

! O"P')D' Q4R')B%" E#B'

La funcln de Ackerman es e[emplo clslco de recurslvldad. Ls una funcln que crece muy
rpldamenLe (LanLo es su valor como en su rbol de llamadas), esLa deflnlda:



ara valores pequenos de m, como 1, 2 o 3 A crece relaLlvamenLe lenLo con respecLo a n
(a lo sumo exponenclalmenLe). ara m >= 4 crece ms rpldo







Sl hablamos de la funcln lnversa, esLa crece muy lenLamenLe. Se denoLa con !. ue hecho,
!(n) es menor que 3 para cualquler Lamano de enLrada n, que ya para A(4, 4) esLa en el
orden de .

Aparece en algunos algorlLmos como por e[emplo, dls[olnL-seL daLa sLrucLure" y
Chazelle's algorlLhm for mlnlmun spannlng Lrees".

! S/0%)#.B#4 E#B' LM S/0
<
A

Las funclones o algorlLmos neceslLan una canLldad de Llempo que es logarlLmlcamenLe
proporclonal al numero de elemenLos de enLrada.

Asumlr que se qulere buscar un numero (el 41) denLro de un con[unLo de elemenLos
ordenados. or e[emplo, Lenemos el slgulenLe con[unLo [3, 3, 8, 9, 41}.

Lmpezamos con el elemenLo de en medlo y hacemos la comparacln. Ll me[or caso se da
cuando enconLramos el numero al prlmer lnLenLo. ero el elemenLo de en medlo es el 8.
Cue no es el numero que esLamos buscando. uebldo a que sabemos que el con[unLo de
elemenLos esLa ordenado, podemos deLermlnar que debemos de buscar el numero desde
el elemenLo de en medlo hasLa el ulLlmo. SlmplemenLe lgnoramos la prlmera mlLad del
con[unLo. ue nuevo apllcamos una lglca slmllar a la mlLad del con[unLo. ConLlnuaremos
con esLo, hasLa enconLrar el elemenLo o llegar a la conclusln de que esLe no exlsLe.

Como se puede ver en cada lnLenLo, el numero de elemenLos es reducldo a la mlLad.
LnLonces en un con[unLo de 1000 numeros, el peor escenarlo serla el slgulenLe:
o uespues del prlmer lnLenLo, nos quedan 300 numeros.
o uespues del segundo lnLenLo, nos quedan 230 numeros.
o uespues del Lercer lnLenLo, nos quedan 123 numeros.
o uespues del cuarLo lnLenLo, nos quedan 62 numeros.
o uespues del qulnLo lnLenLo, nos quedan 31 numeros.
o uespues del sexLo lnLenLo, nos quedan 13 numeros.
o uespues del sepLlmo lnLenLo, nos quedan 7 numeros.
o uespues del ocLavo lnLenLo, nos quedan 3 numeros.
o uespues del noveno lnLenLo, nos queda 1 numero.
o uespues del declmo lnLenLo, ya conocemos el resulLado. ?a sea que
enconLremos el numero buscado o deLermlnemos que no se encuenLra
denLro del con[unLo.

Como se puede ver, en el peor escenarlo neceslLamos solamenLe 10 comparaclones.

Ln Lermlnos maLemLlcos, sl el numero de elemenLos es n, revlsaremos log
2
n numeros.
or lo LanLo es llamada funcln logarlLmlca.

Los arboles de busqueda blnarlos Llenen esLe Llpo de comple[ldad cuando queremos
locallzar un elemenLo en el rbol.

! 3)%4.#/"%? F/T')



! S#"'%) E#B' LM 9KAN

lunclones, programas o algorlLmos que neceslLan una canLldad de Llempo que es
dlrecLamenLe proporclonal al numero de lnpuLs o elemenLos de enLrada.

or e[emplo, se qulere escrlblr una funcln que regrese el numero ms grande de un
arreglo desordenado de enLeros. La enLrada es un arreglo de enLeros.

ara resolver esLe problema, Lenemos que lmplemenLar lo slgulenLe:
o lLerar a Lraves del arreglo.
o Asumlr que el numero x ms grande es el prlmero.
o Conforme se lLera al slgulenLe elemenLo, comparar el numero mayor x con el
elemenLo acLual. Sl el elemenLo es mayor que x, el elemenLo acLual se
convlerLe en x. Sl esLe es menor que x, no hacer nada. or conslgulenLe,
cuando Lermlnemos la lLeracln del arreglo, sabremos cual es el elemenLo ms
grande.

Ln esLe e[emplo, el Llempo de e[ecucln de la funcln depende del numero de elemenLos
del arreglo. LsLe lLera sobre Lodos los elemenLos del arreglo, haclendo comparaclones y
regresando el resulLado. Aqul sl lmporLa sl la funcln procesa 10 enLeros o un mllln.

Sl la funcln neceslLa enconLrar el mayor elemenLo de 10 enLeros y para esLo Loma x
mlllsegundos en e[ecuLarlo, se neceslLarn 10x mlllsegundos para enconLrar el numero
mayor en un arreglo de 100 elemenLos. or lo LanLo, podemos deduclr, que el Llempo de
e[ecucln de esLa funcln en llneal.

! UH(/"'".#%? E#B'

un algorlLmo cuyo Llempo de e[ecucln esLe dado por la formula:

1lempo de e[ecucln = k1 * (k2)
n


uonde n es el Lamano de los daLos de enLrada y k1, k2 son consLanLes.

Ll Llempo de e[ecucln crece Lan rpldo que lncluslve las compuLadoras ms rpldas no
pueden resolver los problemas de Lamano pracLlco en un Llempo razonable.

or e[emplo, LraLar de romper un password probando cada poslble comblnacln
(asumlendo que es un password numerlco de Lamano n) no da una comple[ldad de C(10
n
)

! F/?I"/B#%? E#B'

Se dlce que un algorlLmo se resuelve en Llempo pollnomlal sl el numero de pasos
requerldos para compleLar el algorlLmo para un numero dado de enLradas es C (n
k
) para
algunos enLeros no negaLlvos k, donde n es la comple[ldad de la enLrada. Se dlce que esLos
algorlLmos son rpldos". La mayorla de las operaclones maLemLlcas como la suma,
resLa, mulLlpllcacln y dlvlsln, asl como la ralz cuadrada, poLenclas y logarlLmos, pueden
ser reallzados en Llempo pollnomlal. rocesar los dlglLos de consLanLes maLemLlcas,
lncluyendo y , pueden ser calculadas en Llempo pollnomlal.

Se reflere al Llempo Lomado para reallzar algunas operaclones donde exlsLen pasos
repeLlLlvos y el Llempo promedlo requerldo esLa en funcln del numero de pasos a la
poLencla de algun valor. Pagamos un e[emplo no maLemLlco:

Supongamos una Larea que conslsLe en hacer una serle de cuadros que se van
lncremenLando en Lamano, esLos esLn formados por azule[os cuadrados de una pulgada y
Loma 1 segundo en poslclonar cada azule[o.

o ara hacer un cuadro de 1 pulgada, neceslLaremos 1 azule[o y Lomar 1 segundo.
o ara hacer un cuadro de 2 pulgadas, neceslLaremos 4 azule[os y Lomar 4
segundos.
o ara hacer un cuadro de 3 pulgadas, neceslLaremos 9 azule[os y Lomar 9
segundos.
o ara hacer un cuadro de 4 pulgadas, neceslLaremos 16 azule[os y Lomar 16
segundos.

LnLonces el Llempo requerldo para crear un cuadro es pollnomlal de acuerdo al Lamano
del cuadro, donde:

1 (segundos) = 1 segundo x Lamano del cuadro en pulgadas ^2

Los algorlLmos pollnmlcos Lardan un Llempo en resolver un problema que se puede
acoLar medlanLe un pollnomlo p(n), que depende del Lamano n del problema. ue esLa
forma, al crecer el Lamano del problema el Llempo que Larda el algorlLmo en resolver el
problema crece, pero despaclo (pollnmlcamenLe), ya que la velocldad de creclenLo de un
pollnomlo, es lenLa (las derlvadas nos ayudan a saber cul es esa velocldad).

E:)#"0 >%45#"'

una mqulna de 1urlng es una mqulna ldeal -formalmenLe hablando se LraLa de un
algorlLmo- en dos aspecLos bslcos. La prlmera ldeallzacln se debe a que su memorla es
lllmlLada. La segunda ldeallzacln se produce por el hecho de una mqulna de 1urlng
nunca comeLe errores. A efecLos de represenLar una mqulna de 1urlng, podemos
lmaglnarla como una clnLa lnflnlLa dlvldlda en cuadros sobre la que se reallzan las
operaclones de manlpulacln de slmbolos. La mqulna dlspone de un lecLor que reallza las
slgulenLes funclones:

o LsL slLuado en Lodo momenLo anLe uno de los cuadros de la clnLa
o Lee lo que hay en ese cuadro.
o Lleva a cabo una lnsLruccln en el momenLo slgulenLe.

1u problema es el slgulenLe: Llenes un numero represenLado en blnarlo y quleres sumarle
1.
or e[emplo, 1001011 + 1 = 1001100

Ll algorlLmo "obvlo" funclona asl:
1. nos fl[amos en el blL del exLremo derecho
2. Sl el blL acLual es 1 enLonces lo camblamos por cero, nos fl[amos en el blL
lnmedlaLamenLe a la lzqulerda y regresamos al paso 2, en oLro caso (el blL acLual no es 1)
enLonces lo camblamos por 1 y Lermlnamos

nuesLro e[emplo se verla asl (el blL acLual esL enLre corcheLes):
100101[1]
10010[1]0
1001[1]00

Ahora blen cmo hacemos una mqulna de 1urlng slmular esLe algorlLmo? Suponemos
que la enLrada es preclsamenLe el numero en blnarlo y Lodo lo dems es un espaclo en
blanco "_".

La prlmera eLapa conslsLe en mover el cabezal hasLa enconLrar el prlmer _, la mqulna
lnlcla en el esLado s1 y con el cabezal en el exLremo lzqulerdo de la enLrada, enLonces hay
Lres poslbllldades: sl aparece un "0" o un "1" enLonces nos quedamos en el esLado s0,
escrlblmos el mlsmo numero "0" o un "1", y movemos el cabezal un lugar a la derecha 8
(rlghL), la oLra poslbllldad es que aparezca un _, en esLe caso acabamos de pasar el
exLremo derecho, asl que nos camblamos a oLro esLado s2, de[amos el espaclo en blanco
lgual, y nos movemos un lugar a la lzqulerda L (lefL), or lo LanLo el paso 1 se ve asl en una
mqulna de 1urlng
(s1, "0") - (s1, "0", 8)
(s1, "1") - (s1, "1", 8)
(s1, "_") - (s2, "_", L)

Ck, con esLas Lres lnsLrucclones ya slmulamos el paso 1, y al Lermlno de esLe paso la
mqulna debe esLar en el esLado s2 (paso 2). Ll paso 2 lo hacemos asl: Sl el slmbolo acLual
es "1" enLonces nos quedamos en el esLado s2, camblamos el 1 por un "0" y nos movemos
un lugar a la lzqulerda. Sl el slmbolo acLual es "0" enLonces nos pasamos al esLado s3,
camblamos el 0 por un "1" y nos movemos un lugar a la lzqulerda. llnalmenLe la ulLlma
poslbllldad es enconLrarnos un "_", como un espaclo en blanco es equlvalenLe a un cero,
enLonces pasamos al esLado s3, camblamos a _ por un "1" y nos movemos un lugar hacla
la lzqulerda:
(s2, "0") - (s3, "1", L)
(s2, "1") - (s2, "0", L)
(s2, "_") - (s3, "1", L)

Ahora blen, una vez que logramos esLo ya Lermlnamos en el esLado s3, por lo LanLo
marcamos al esLado s3 como "esLado flnal" y llsLo, esLa es nuesLra mqulna de 1urlng:
(s1, "0") - (s1, "0", 8)
(s1, "1") - (s1, "1", 8)
(s1, "_") - (s2, "_", L)
(s2, "0") - (s3, "1", L)
(s2, "1") - (s2, "0", L)
(s2, "_") - (s3, "1", L)

Ll e[emplo anLerlor se verla ms deLalladamenLe asl:
LsLado s1, [1]001011
LsLado s1, 1[0]01011
LsLado s1, 10[0]1011
LsLado s1, 100[1]011
LsLado s1, 1001[0]11
LsLado s1, 10010[1]1
LsLado s1, 100101[1]
LsLado s1, 1001011[ ]
LsLado s2, 100101[1]
LsLado s2, 10010[1]0
LsLado s2, 1001[0]10
LsLado s3, 100[1]110 }LsLado flnal!

S-ar putea să vă placă și