Cosas

De las que no tengo donde escribir

Memoización en Python

La memoización se refiere a recordar los resultados de las llamadas a un método de python (“memoización”, “memorándum” a recordar) con el fin de devolver el resultado y tener que perder el tiempo calculando de nuevo. Es muy útil en métodos recursivos, ya que evitan recursiones largas y con gran consumo de tiempo y recursos de la computadora. Se considerarlo como un caché para los resultados del método o función.

Veamos el siguente algoritmo para calcular números de Fibonacci:

 fibonacci(n):
    if n == 1:
          return 1
    elif n == 2:
          return 1
    elif n>2:
          return fibonacci(n-1) + fibonacci(n-2)

Este código es simple, elegante pero muy ineficiente en la medida de que n crezca mucho.

La mejor manera, usando esta técnica sería:

fibonacci_cache = {}
def fibonacci(n):
# vemos si ya conocemos el resultado y lo devolvemos, ya que debería haber quedado en el diccionario.
   if n in fibonacci_cache:
      return fibonacci_cache[n]
   if n == 1:
      return 1
   elif n == 2:
      return 1
   elif n>2:
      value = fibonacci(n-1) + fibonacci(n-2)
# guardo el valor en la cache
   fibonacci_cache[n] = value
   return value

La otra manera de resolver esto es con una librería que hace el trabajo, esta es la librería lru (Least Recently Used cache), aunque hay otros métodos para realizar la memoización.

@lru_cache(maxsize = 1000)
def fibonacci(n):
   if n == 1:
      return 1
   elif n == 2:
      return 1
   elif n>2:
      return fibonacci(n-1) + fibonacci(n-2)

El maxsize tiene si no se indica en default seteado en 128, pero siempre es mejor cachear con más memoria.

Para el caso de un calcular factoriales, en por ejemplo, una serie de Taylor, este proceso de evitar hacer cuantas de más sería realmente útil. La versión simple podría calcularse como:

factorial_memo = {}
def factorial(k):
    if k < 2: return 1
    if k not in factorial_memo:
        factorial_memo[k] = k * factorial(k-1)
    return factorial_memo[k]

El efecto Lipovetzky

El efecto Lipovetsky corresponde al fenómeno por el cual una ley produce consecuencias inversas a las buscadas. Esta efecto se vio con detalle en una ley de alquileres que el diputado Daniel Andrés Lipovetzky (JxC) redactó y logró su aprobación. Esta ley de alquileres fue aprobada con el supuesto objetivo de que el precio de los alquileres tuvieran regulación cuestión de mejorar la situación los inquilinos perjudicando severamente a los propietarios, con la supuesta idea que los inquilinos pagarían menos. Este diputado tomó como algo personal a esta ley con la idea de ser mencionado en los medios de comunicación con el fin de parecer más “popular”. Si bien no es toda su responsabilidad porque la ley fue aprobada en las dos cámaras. Pero la idea que una cruzada demagógica con el fin de obtener popularidad política puede terminar muy mal, está implícita en el “efecto Lipovetzky”.

Una entrada en la wikipedia fue escrita incluyendo el efecto Lipovetzky pero luego la página fue eliminada y en las redes sociales se habló de un pedido del gobierno para tal hecho.

Como resultado de esta ley, tres meses después de su aprobación los precios aumentaron un 19.2%, y la oferta bajó sensiblemente. Claramente la ley mostró varias cosas:

  • No es conveniente regular un mercado que funciona.
  • En general una ley que busca la regulación con normas demagógicas termina arruinando un mercado y perjudicando severamente a los consumidores. Sobre todo si no era un mercado con casos conocidos de abuso y cuya autoregulación funcionaba correctamente.
  • Las Leyes no suelen mejoran la calidad de vida de la gente, si se busca la demagogia barata suelen empeorarle la vida.
  • Si existe un bien que se produce y se perjudica severamente al productor ese bien puede desaparecer del mercado.

Este nombre fue creado por el usuario de twitter: @matiasbruales y ya ha llegado a ser nombrado en los principales diarios de la Argentina:

Y como burla al autor, circulan por internet tapas de papers que supuestamente estudian sus efectos negativos:

Referencias:

Page 2 of 2

Powered by WordPress & Theme by Anders Norén