New Immissions/Updates:
boundless - educate - edutalab - empatico - es-ebooks - es16 - fr16 - fsfiles - hesperian - solidaria - wikipediaforschools
- wikipediaforschoolses - wikipediaforschoolsfr - wikipediaforschoolspt - worldmap -

See also: Liber Liber - Libro Parlato - Liber Musica  - Manuzio -  Liber Liber ISO Files - Alphabetical Order - Multivolume ZIP Complete Archive - PDF Files - OGG Music Files -

PROJECT GUTENBERG HTML: Volume I - Volume II - Volume III - Volume IV - Volume V - Volume VI - Volume VII - Volume VIII - Volume IX

Ascolta ""Volevo solo fare un audiolibro"" su Spreaker.
CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
Función de Ackermann - Wikipedia, la enciclopedia libre

Función de Ackermann

De Wikipedia, la enciclopedia libre

Artículo destacado

La función de Ackermann, utilizada en la teoría de la computación, es una función recursiva que toma dos números naturales como argumentos y devuelve un número natural.

Tabla de contenidos

[editar] Definición

La función de Ackermann se define por recursividad como sigue:

A(m,n)=     \begin{cases}      n+1,               &\mbox{si }m=0;     \\      A(m-1, 1),         &\mbox{si }m>0\mbox{ y }n=0;     \\      A(m-1, A(m, n-1)), &\mbox{si }m>0\mbox{ y }n>0     \end{cases}

[editar] Recursiva, pero no recursiva primitiva

Para fines educativos se utiliza una versión alternativa, como la que se describe a continuación.

Se comienza con la siguiente sucesión de funciones:

f_{0}(x) = s(x) \,
f_{1}(x) = f_{0}^{x+2}(x) = s^{x+2}(x)
f_{2}(x) = f_{1}^{x+2}(x) = (s^{x+2})^{x+2}(x)
f_{k+1}(x) = f_{k}^{x+2}(x)


Donde s(x) es la función sucesor y fn(x) es la función potencia (aquella que aplica f n veces).

[editar] Propiedades de la función de Ackermann

  • Sea \; k \in \mathbb{N} ,\; f_{k} \in FRP
  • Sea \; a > b ,\; f_{k}(a) > f_{k}(b)
  • Sea \; x,k \in \mathbb{N} ,\; f_{k}(x) > x
  • Sea \; k \in \mathbb{N} ,\; f_{k+1}(x) > f_{k}(x)


Además la función de Ackerman (ACK(x) = fx(x)) no es FRP. La demostración de este teorema es por el absurdo y utilizando el lema que toda función recursiva primitiva está mayorada por una función Ackermann.


Comenzamos suponiendo que ACK(x) \in FRP, por tanto ACK(x)+1 \in FRP


Usando el lema de la mayoración, debe existir un k tal que ACK(x)+1 \le f_{k}(x)


Pero entonces como esto vale para todo x, también valdrá para x=k

ACK(k)+1 \le f_{k}(k), usando la definición, llegamos a que:


ACK(k)+1 \le ACK(k)


Lo cual es absurdo.

Esta función crece extremadamente rápido A(4,2) ya tiene 19.729 dígitos. Este crecimiento desmesurado se puede utilizar para demostrar que la función computable f(n) = A(n, n) crece más rápido que cualquier función recursiva primitiva, y por ello no es recursiva primitiva.

[editar] Tabla de Valores

Números de A(m,n)
m\n 0 1 2 3 4 n
0 1 2 3 4 5 n + 1
1 2 3 4 5 6 n + 2
2 3 5 7 9 11 2n + 3
3 5 13 29 61 125 8\cdot 2^n-3
4 13 65533 2^{65536}-3 \approx 2 \cdot 10^{19728}  A(3,265536-3) A(3,A(4,3)) 2^{2^{\dots^2}}-3 (n + 3 términos)
5 65533 A(4,65533) A(4,A(5,1)) A(4,A(5,2)) A(4,A(5,3))
6 A(5,1) A(5,A(5,1)) A(5,A(6,1)) A(5,A(6,2)) A(5,A(6,3))

Para darse una idea de la magnitud de los valores que aparecen de la fila 4 en adelante, se puede destacar que por ejemplo, A(4, 2) es mayor que el número de partículas que forman el universo elevado a la potencia 200 y el resultado de A(5, 2) no se puede escribir dado que no cabría en el Universo físico. En general, por debajo de la fila 4, ya no es posible escribir todos los dígitos del resultado de la función.

[editar] Explicación intuitiva

La primera fila de la función de Ackerman contiene los enteros positivos, dado que A(0, n)) consiste en sumar uno a n. El resto de las filas se pueden ver como indirecciones hacia la primera. En el caso de m = 1, se redirecciona hacia A(0, n + 1), sin embargo, la simplificación es algo complicada:

A \,(1, 2)
 
 
 
 
= A \,(0, A(1,1))
= A \,(0, A(0, A(1,0)))
= A \,(0, A(0, 2))
= A \,(0, 3)
= 4 \,


Se puede intentar con una caso algo más complicado— como A(4, 3); el primer valor que no cabe en el universo físico.

A \,(4, 3)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
= A \, (3, A(4, 2))
= A \, (3, A(3, A(4, 1)))
= A \, (3, A(3, A(3, A(4, 0))))
= A \, (3, A(3, A(3, A(3, 1))))
= A \, (3, A(3, A(3, A(2, A(3, 0)))))
= A \, (3, A(3, A(3, A(2, A(2, 1)))))
= A \, (3, A(3, A(3, A(2, A(1, A(2, 0))))))
= A \, (3, A(3, A(3, A(2, A(1, A(1, 1))))))
= A \, (3, A(3, A(3, A(2, A(1, A(0, A(1, 0)))))))
= A \, (3, A(3, A(3, A(2, A(1, A(0, A(0, 1)))))))
= A \, (3, A(3, A(3, A(2, A(1, A(0, 2))))))
= A \, (3, A(3, A(3, A(2, A(1, 3)))))
= A \, (3, A(3, A(3, A(2, A(0, A(1, 2))))))
= A \, (3, A(3, A(3, A(2, A(0, A(0, A(1, 1)))))))
= A \, (3, A(3, A(3, A(2, A(0, A(0, A(0, A(1, 0))))))))
= A \, (3, A(3, A(3, A(2, A(0, A(0, A(0, A(0, 1))))))))
= A \, (3, A(3, A(3, A(2, A(0, A(0, A(0, 2))))))
= A \, (3, A(3, A(3, A(2, A(0, A(0, 3)))))
= A \, (3, A(3, A(3, A(2, A(0, 4)))))
= A \, (3, A(3, A(3, A(2, 5))))


Para seguir calculando este valor, habría que encontrar que A(2, 5) vale 13, luego evaluar A(3, 13), que es 8179. Sin embargo, el valor de A(3, 8179) es comparable al número de átomos del Universo elevado a una potencia de más de 12. Ese número tendría que calcularse para hacer la llamada más externa a la función, pero ya no sería posible escribir los dígitos del resultado en el universo físico.

Todo esto por composición de la única operación aritmética que se utiliza, es decir, el incremento en uno de un valor (en el cálculo de A(0, n)).

[editar] Descripción explícita

Intuitivamente, la función de Ackermann define la generalización de la multiplicación por dos (sumas iteradas) y la exponenciación con base 2 (productos iterados) hasta la exponenciación iterada, la iteración de la exponenciación iterada, la iteración de la operación anterior, etc. Puede expresarse de forma concisa y no recursiva mediante la notación de flecha de Conway:

A(m,n)=2\rightarrow (n+3)\rightarrow (m-2)-3

o los hiper operadores:

A(m,n)=\mathrm{hyper}(2,m,n+3)-3 \;


[editar] Historia

En 1928, Wilhelm Ackermann consideró una función doblemente recursiva A(mnp) de tres variables: m → n → p en la notación de Conway. Ackermann demostró que se trata de una función recursiva que no es primitiva recursiva. Esa definición fue simplificada por Rozsa Peter y Raphael Robinson en la versión de dos variables dada al principio. Rozsa Peter también demostró que la doble recursión no se puede reducir a recursión primitiva (y la triple recursión no se puede reducir a recursión primitiva y doble recursión, etc).

Sin embargo, la primer función doblemente recursiva que no es recursiva primitiva fue descubierta por Gabriel Sudan en 1927:

F _0 (x, y) = x+y,\,
F _{n+1} (x, 0) = x, \  n \ge 0\,
F _{n+1} (x, y+1) = F _n (F_{n+1} (x, y), F_{n+1} (x, y) + y + 1), \ n\ge 0.\,

Tanto Sudan como Ackermann eran alumnos de David Hilbert en ese entonces.

[editar] Análisis de algoritmos

Así como la función diagonal  f (n) = A(nn) crece muy rápidamente, su inversa crece muy lentamente y se utiliza frecuentemente en análisis de algoritmos. En ese contexto, se suele redefinir la función de Ackermann por otra de comportamiento asintótico similar, pero evitando los términos −3, o partiendo de la potencias de 2 para la fila 0 (lo que equivale a omitir las tres primeras filas). Si bien el resultado de estas variantes no es idéntico al de la función original, se pueden ver como similares al ser posible acotar la diferencia. En el caso de la inversa de la función diagonal, su resultado es inferior a 4 para entradas de prácticamente cualquier tamaño, de manera que se asimila a una función constante.

[editar] Medida de comparación

Debido a su definición, profundamente recursiva, la función de Ackermann se utiliza con frecuencia para comparar compiladores en cuanto a su habilidad para optimizar la recursión. Por ejemplo, un compilador capaz de notar que A(3, 30) se puede calcular basándose en potencias de 2, o que guarda resultados intermediarios tales como A(3, n) y A(2, n) en lugar de recalcularlos cada vez, ahorraría tiempo de ejecución por un factor de 100 o 1000. Igualmente, al calcular directamente A(1, n) en lugar de hacer una llamada recursiva se realizan ahorros significativos.

Es posible calcular el término A(4, 2) pero no recursivamente, sino por otros medios.

[editar] Código C

int ackerman(int m, int n) {
  int temp;
  if(m == 0)
    temp = n + 1;
  else {
    if (n == 0)
      temp = ackerman(m-1, 1);
    else
      temp = ackerman(m-1, ackerman(m, n-1));
  }
  return(temp);
}

[editar] Código de Haskell

ack 0 n = n + 1
ack m 0 = ack (m - 1) 1
ack m n = ack (m - 1) (ack m (n - 1))
Véase también: Haskell

[editar] Código de Prolog

ackerman(0,N,R):- R is N+1.
ackerman(M,0,R):- M1 is M-1,
         ackerman(M1,1,R).
ackerman(M,N,R):- M1 is M-1,
         N1 is N-1,
                 ackerman(M,N1,R1),
                 ackerman(M1,R1,R).

[editar] Bibliografía

  • Ackermann, Wilhelm: Zum Hilbertschen Aufbau der reelen Zahlen. Math. Annalen 99 (1928), pp. 118-133.
  • von Heijenoort, J. (ed.): From Frege to Gödel: A Source Book in Mathematical Logic. Cambridge: Harvard University Press, 1967. Disponible en línea.
  • Kozen, Dexter C.: The Design and Analysis of Algorithms. Springer, 1992.
  • Robinson, Raphael M.: Recursion and double recursion. Bull. Amer. Math. Soc., Vol. 54, pp. 987-993.
  • Schöning, Uwe: Theoretische Informatik – kurzgefasst. Spektrum Akademischer. ISBN 3-8274-1099-1
  • Sundblad, Yngve: The Ackermann Function. A Theoretical, Computational, and Formula Manipulative Study. BIT 11 (1971), 107-119.

[editar] Enlaces externos

Static Wikipedia (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2006 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia February 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu