Wednesday, December 18, 2013

Como crear un motor eficiente de busqueda electronica, entre algunos consejos.

Fuente: Udacity 


Primero, donde estas en contexto con la programacion usando el lenguaje de programacion Phyton?



Si sabes como resolver estas preguntas, no importa mucho leer este post, si te interesa lo que dice, bueno, distinto, si no sabes mucho, aventurate un poco, pero no tomes todo lo escrito como hecho, investiga por tu cuenta y aprende.


Class: CS101 in Phyton

Session 6: Recurssion

Ejemplos de problemas cuando uno sabe algo de programacion por Phyton y algo de recurcion.


Definicion de recursion:

1 Caso de Base, o secuencia cero
-la minima expresion de la secuencia o elementos analizados


2 Caso recursivo

-la version mas corta  del mismo metodo antes del 'base case'.

-Recursive definition

1. One base case
- meaning the smallest input know to the answer

2 Recursive case
-Smallest versions of 'itself'


Quiz 1

 Define a procedure, factorial, that takes a natural number as its input, and
# returns the number of ways to arrange the input number of items.

Prueba 1


Define un metodo, factorial, donde tomes un numero natural como entrada, y

retornes el numero de veces que puede ser organizado en numeros de aquellos elementos de numeros reales.

def factorial(n):

Quiz 2

# Define a procedure is_palindrome, that takes as input a string, and returns a
# Boolean indicating if the input string is a palindrome.

Define un proceso que devuelva una respuesta si la palabra usada o analizada en el programa como input, es palindromo. Una palabra palindromo son aquellos elementos que de alante pa tras son lo mismo que de a tras palante. Ejemplo. la letra 'a' es palindromo, 'ab' no lo es, 'aa' lo es, 'aca' lo es, 'madam' la es y asi sucesivamente. retorna 'verdadera' si lo es. 'True'

# Base Case: '' => True
# Recursive Case: if first and last characters don't match => False
# if they do match, is the middle a palindrome?

#Caso donde la 'secuencia sea cero' o 'base case'= 'True'
#caso recursivo: si el primer  y el ultimo elemento o caracter no son las mismas =False o falso
#si son iguales, crea un proceso para saber si el medio de las palabras o elementos es un palindromo.

def is_palindrome(s):

Tips: http://docs.python.org/3/library/stdtypes.html#string-methods

Tips: la recurcion es la implementacion del mismo metodo dentro del metodo, que solo saldra cuando se llegue al 'base case' o 'la secuencia cero' por lo mismo se resta de la secuencia lo que se va a analizar hasta llegar al 'base case' o 'secuencia cero' y en este caso la 'secuencia cero' es la minima expresion del input, o elemento puesto para resolver. 


Otros tips un poco mas enfocado en la pregunta: 


-len(n)
-n[1:2]

Second day of session 6


Recurssion and fibonacci


  • El numero fibonacci es una secuencia que suma dos numeros: el anterior al siguiente, por el siguiente ya sumado por el anterior .
  • Estos dos numeros son parte de una secuencia que en su mismo metodo se expande infinitamente.
  • Otra forma de verlo es como la suma del resultado y el numero anterior


Por ejemplo:

0 = 0
1 = 1
0 1 = 1
1 1 = 2
1 2 = 3
2 3 = 5 y asi sucesivamente

pero matematicamente es lo siguiente
n>1
n : n-1  +  n-2
como es una secuencia, el n-1 y el n-2 no significan el numero menos 1 o 2
sino la siguiente secuencia

  0
     1
        ( 1 ) [n-1]    +   ( 1[n-1] +  1=  2) [n-2]
            viene de 1 + 2 =  3
              y lo siguiente seria 2 + 3 = 5
               y lo siguiente seria 3 + 5 = 8
                y lo siguiente seria 5 + 8 = 13
                 y lo siguiente seria 8 + 13 = 21

y asi scuencialmente hasta el infinito.




*****

Como crear un search engine eficiente, o un motor eficiente de busqueda electronica, entre algunos consejos.


  • Se estudia un poco la recurcion para entender un poco el como se buscan eficientemente las paginas en la internet. Cada pagina tiene su direccion, esa direccion en el programa diseñado tiene que ser una 'llave' o 'punto de referencia' que cuando en la mayoria de letras y codigos, salga esa 'llave' o 'punto de referencia' el programa se meta en la pagina, por medio de algunas funciones predeterminadas, y busque la informacion determinada o diseñada a buscar.
  • Ejemplo de la informacion: buscar cuantas veces se repite una palabra y contarla, ponerla en un 'diccionario' y formular cualquier tipo de estadistica.
  • Un diccionario es un metodo que organiza cualquier tipo de informacion dada su 'llave' o 'punto de referencia, y por ende necesita un lugar donde colocar los datos sustraidos por el uso de la 'llave' o 'el punto de referencia' llamado buckets, los buckets pueden ser nodos, nodes, arrays, listas.
  • Con esto se puede implementar un searh engine o  motor eficiente de busqueda electronica, planear un buen metodo recursivo que busque las paginas por medio de 'llaves' o 'punto de referencia', saber como implementar los metodos para que la informacion no se repita y el programa no caiga en un loop, para esto se necesita saber un poco de combinaciones y 'trees' o 'arboles', y el diccionario para guardar la informacion eficientemente y tenerla a la mano para compartir o aprender sobre cualquier tipo de informacion especifica deseada.
  • Un 'arbol' o 'tree' como la palabra puede definir, es como un arbol normal que tiene, en este sentido, una raiz, pero esta raiz puede ser la combinacion de varios elementos, y en su crecimiento, uno debe saber que un arbol de manzanas no da naranjas, con esto digo que los mismos elementos tienen que ser del mismo universo, y saber cuales son sus elementos y su contenido. 
  • Ejemplo de un 'tree' o un 'arbol': el alfabeto o las letras conocidas por el español tienen entre 26 o 25 elementos, pero estos elementos pueden ser combinados eternamente por medio de cualquier calculacion o formula matematica, pero en los 'trees' o 'arboles' comienza con unos elementos predeterminados que crean la raiz. por lo menos. si una raiz comienza con 'a', si solo se quiere tener puras a, no habra 'arbol' o 'tree' sino que solo una secuencia, y esta es la diferencia, por lo mismo un 'tree' o 'arbol' tiene que implementar una serie de opciones u otros elementos del mismo universo.
  • Por eso puede comenzar por 'a', pero la segunda generacion, o nivel, se expandera a ser, aa, ab, ac, ad, o todos los elementos encontrados por la 'llave' o 'el punto de referencia'. y dentros de las nuevas 'llaves' o 'punto de referencia' se buscan los siguientes 'puntos de referencia' o 'llaves'
  • Ejemplo, en una pagina se encuentran varios otros link, esos links son las raices del arbol.
  • Uno puede diseñar un programa para guardar cuantas veces se repite la misma 'llave' o 'punto de referencia, y saber su popularidad, o/y uno puede omitir este 'punto de referencia' o 'llave' para no caer en un 'loop' infinito o repeticion, creando una especie de metodos o funciones que guarden las 'llaves' o 'puntos de referencia' usados y/o saltar u omitir ese elemento repetido, para asi no usar tanto la memoria y que el programa fluya sin ningun tipo de complicacion, que ojo, todos los programas tienen problemas, o bugs, pero se mejora o se cambia por completo el programa una vez creado otro programa o mejorado el anterior.
  • Consejo: si al trabajar, o diseñar un programa encuentran muchos problemas, borralo todo, despeja la mente por horas, y escribe la solucion como la harias normalmente sin el uso de la programacion, luego escribe los pasos, y traducelos al lenguaje que manejes y trabaja para darle solucion, poco a poco, puede que con uso de pequeñas metas, o por uso de respuestas ya analizadas que guiaran su diseño a la solucion o implementacion de un programa eficiente, directo, y simple. Entiende el uso de los algoritmos y el como crear funciones usando estos. El conocimiento de la matematica pura, haran que esa complejidad, del pensar abstractamente en soluciones de numeros y elementos, se transforme en el arte de la simplicidad, de lo contrario sera un programa lleno de codigos y metodos inutiles que crearan a la larga confucion a la hora de actualizar el programa, o problemas como el volver a hacer un progama para que se entienda por todos.

Para mejor comprension de esta vagua explicacion sobre los 'Diccionarios', 'Arboles o trees', 'Llaves o puntos de referencia' o 'Keys', la internet es una gran herramienta que permite a cualquiera aprender de estos temas sin tener la escusa del no hacerlo por dinero o falta de motivacion, pues motiva cuando poco a poco, se ve como el mundo se viene construyendo, en parte, por medio del uso de esta gran herramienta llamada internet; y el estudio del como crear programas que mejoren su condicion, es una tarea que al saberla remunera, tanto emocionalmente, como socialmente y por ende su expancion, intercambiando ideas y/o programs, gratuitamente, como la venta del servicio de quien conoce como crear soluciones, por tambien querer un poco de esa otra herramienta llamada dinero, medio por el cual quien la hace controla su maquinaria.


No comments:

Post a Comment