martes, 1 de junio de 2010

Máquina turing (ptos extra)


La máquina de Turing consta de un cabezal lector/escritor y una cinta infinita en la que el cabezal lee el contenido, borra el contenido anterior y escribe un nuevo valor. Las operaciones que se pueden realizar en esta máquina se limitan a:

avanzar el cabezal lector/escritor hacia la derecha.
avanzar el cabezal lector/escritor hacia la izquierda.
El cómputo es determinado a partir de una tabla de estados de la forma:

(estado, valor) (nuevo estado, nuevo valor, dirección)

Esta tabla toma como parámetros el estado actual de la máquina y el carácter leído de la cinta, dando la dirección para mover el cabezal, el nuevo estado de la máquina y el valor a ser escrito en la cinta.

Con este aparato extremadamente sencillo es posible realizar cualquier cómputo que un computador digital sea capaz de realizar.

Mediante este modelo teórico y el análisis de complejidad de algoritmos, fue posible la categorización de problemas computacionales de acuerdo a su comportamiento, apareciendo así, el conjunto de problemas denominados P y NP, cuyas soluciones en tiempo polinómico son encontradas según el determinismo y no determinismo respectivamente de la máquina de Turing.

De hecho, se puede probar matemáticamente que para cualquier programa de computadora es posible crear una máquina de Turing equivalente. Esta prueba resulta de la Tesis de Church-Turing, formulada por Alan Turing y Alonzo Church, de forma independiente a mediados del siglo XX.

La idea subyacente es el concepto de que una máquina de Turing es una persona ejecutando un procedimiento efectivo definido formalmente, donde el espacio de memoria de trabajo es ilimitado, pero en un momento determinado sólo una parte finita es accesible. La memoria se divide en espacios de trabajo denominados celdas, donde se pueden escribir y leer símbolos. Inicialmente todas las celdas contienen un símbolo especial denominado “blanco”. Las instrucciones que determinan el funcionamiento de la máquina tienen la forma, “si estamos en el estado x leyendo la posición y, donde hay escrito el símbolo z, entonces este símbolo debe ser reemplazado por este otro símbolo, y pasar a leer la celda siguiente, bien a la izquierda o bien a la derecha”. La máquina de Turing puede considerarse como un autómata capaz de reconocer lenguajes formales. En ese sentido es capaz de reconocer los lenguajes recursivamente enumerables, de acuerdo a la jerarquía de Chomsky. Su potencia es, por tanto, superior a otros tipos de autómatas, como el autómata finito, o el autómata con pila, o igual a otros modelos con la misma potencia computacional

Una máquina de Turing con una sola cinta puede ser definida como una 7-tupla , donde

es un conjunto finito de estados.
es un conjunto finito de símbolos distinto del espacio en blanco, denominado alfabeto de máquina.
es un conjunto finito de símbolos de cinta, denominado alfabeto de cinta.
es el estado inicial.
es un símbolo denominado blanco, y es el único símbolo que se puede repetir un número infinito de veces.
es el conjunto de estados finales de aceptación.
es una función parcial denominada función de transición, donde es un movimiento a la izquierda y es el movimiento a la derecha.


Ejemplo Definimos una máquina de Turing sobre el alfabeto {0,1}, donde 0 representa el símbolo blanco. La máquina comenzará su proceso situada sobre un símbolo "1" de una serie. La máquina de Turing copiará el número de símbolos "1" que encuentre hasta el primer blanco detrás de dicho símbolo blanco. Es decir, situada sobre el 1 situado en el extremo izquierdo, doblará el número de símbolos 1, con un 0 en medio. Así, si tenemos la entrada "111" devolverá "1110111", con "1111" devolverá "111101111", y sucesivamente.

El conjunto de estados es y el estado inicial es . La tabla que describe la función de transición es la siguiente:

El funcionamiento de una computación de esta máquina se puede mostrar con el siguiente ejemplo (en negrita se resalta la posición de la cabeza lectora/escritora):

La máquina realiza su proceso por medio de un bucle, en el estado inicial s1, reemplaza el primer 1 con un 0, y pasa al estado s2, con el que avanza hacia la derecha, saltando los símbolos 1 hasta un 0 (que debe existir), cuando lo encuentra pasa al estado s3, con este estado avanza saltando los 1 hasta encontrar otro 0 (la primera vez no habría ningún 1). Una vez en el extremo derecho, añade un 1. Después comienza el proceso de retorno; con s4 vuelve a la izquierda saltando los 1, cuando encuentra un 0 (en el medio de la secuencia), pasa a s5 que continúa a la izquierda saltando los 1 hasta el 0 que se escribió al principio. Se reemplaza de nuevo este 0 por 1, y pasa al símbolo siguiente, si es un 1, se pasa a otra iteración del bucle, pasando al estado s1 de nuevo. Si es un símbolo 0, será el símbolo central, con lo que la máquina se detiene al haber finalizado su cómputo.


VIDEO

domingo, 16 de mayo de 2010

Proyecto #5 Detección de Planaridad


Bueno amigos en este proyecto 5 a mi me corresponde presentar el tema detección de planaridad, espero les guste el tema.


PLANARIDAD
Una gráfica puede pensarse como un diagrama que consiste de una colección de puntos y líneas que se unen entre sí. Esta idea puede caracterizarse definiendo a cualquier gráfica G como un par de conjuntos (V(G),E(G)) donde V(G) es un conjunto finito no vacío de elementos llamados vértices y E(G) es un conjunto finito de pares no ordenados de elementos de V(G) llamados líneas o aristas.

A continuación presentamos dos ejemplos de gráficas que si bien parecen bastante diferentes a primera vista son esencialmente iguales (isomorfas).
En la gráfica de La figura 1 hay dos aristas que se intersectan en un punto que no es un vértice de ésta, mientras que en la segunda gráfica las aristas no se intersectan más que en un vértice. Es de notarse que a pesar de que dos gráficas puedan parecer tan distintas posean la misma estructura; observemos que ambas tienen el mismo conjunto de puntos y vértices, es decir, son la “misma” gráfica pero dibujada de diferente manera.


Ahora, dependiendo de cómo dibujemos una gráfica, ésta puede ser plana si puede ser dibujada en el plano de manera que sus aristas no se intersecten geométricamente mas que en un vértice. Por ejemplo, en la figura anterior tenemos dos formas de dibujar la misma gráfica: en la primera el dibujo no es una gráfica plana, mientras que en la segunda si.

Cuando una gráfica es plana, es decir, que podemos dibujarla en el plano sin que sus aristas se intersecten, entonces todos los puntos del plano que no están en G forman caras o regiones. El número r de dichas caras o regiones está dado por la fórmula de Euler como se puede ver en los siguientes resultados.

Teorema 1 Sea G una gráfica conexa (es decir, existe una trayectoria entre cualesquiera dos vértices) plana con p vértices y q aristas y r caras o regiones y con p=3 entonces p-q+r=2.
De donde se puede inferir que:
Corolario 1 Si G es una gráfica plana con p vértices y q aristas y r regiones,
entonces p-q+r=1+k(G) donde k(G) es el número de componentes conexas
de G.

Por otro lado, una gráfica plana puede tener la singularidad de que si agregamos una arista ésta intersecta necesariamente a otra arista, es decir, si para todo u, v que pertenecen al conjunto de vértices V(G) tales que u y v no son adyacentes entonces G+uv no es plana.
Este tipo de gráficas se llama maximal y en su caso las regiones están limitadas por un triángulo, debido a lo cual a las gráficas planas maximales también se les suele llamar triangulaciones.

El hecho que una gráfica sea plana esta relacionado con el número de aristas que ésta tiene, si una gráfica tiene pocas aristas es muy probable que esta sea plana, por el contrario si tiene muchas aristas hay más probabilidades de que no sea plana.
Los siguientes resultados nos permiten calcular el número máximo de aristas que puede
tener una gráfica plana.
Aquí les dejo la presentación en Power Point:

Proyecto 5 algcomp
View more presentations from erik.

">PRESENTACIÓN

JUEGO

Recalco que este proyecto no sería posible si no fuera por las siguientes fuentes consultadas.

fuentes
1
2
3

domingo, 25 de abril de 2010

Proyecto #4 Quicksort

Nuestro equipo eligio el tema de quicksort y mi reporte es este:

¿Qué hice yo?
R= yo busque información y aporte las cosas gráficas como imágenes.

¿Cómo me salió?
R= yo creo que todo está bien.

¿En que aspectos estoy bien y en que me hace falta mejorar?
R= Ando muy bien en casi todo, pero también debería buscar más información o cosas que ayuden a explicar mas el tema.

¿Ayudo a los demás o me apoyo en ellos?
R= ayudo a los demás y ellos me ayudan.

¿Quién se encarga de coordinar el trabajo?
R= Fernando Guerrero Salas fue el que nos coordino casi en todo.

¿Que papel tomo yo?
R= ayudar a mis compañeros.

Mis compañeros de equipo y la presentación:

- Ernesto Méndez Govea
- Fernando Guerrero Salas
- Quicksort (presentación)

jueves, 25 de marzo de 2010

Proyecto #3 Numeros Catalan...

Bueno compañeros, en este tercer proyecto aparte de hacer el proyecto de la serie fibonacci, mi equipo y yo expondremos lo que tratan los numeros catalan. La profesora Elisa nos designó un equipo a cada quien...

Los números de Catalán forman una secuencia de números naturales que aparece en varios problemas de conteo que habitualmente son recursivos. Obtienen su nombre del matemático belga Eugene Charles Catalán (1814–1894).



#include

long*numero;
int n,i;

main()
{

printf("Ingrese el numero deseado de la serie:");
scanf("%d", &n);
numero = new long[n+1];
numero[0] = 1;

for (i = 1; i <= n; i++)
{
numero[i] = (numero[i-1]*2*(2*i-1))/(i+1);
}
printf("\nEl numero de Catalan para el numero %d es %d",n,numero[n]);

getchar();
getchar();
getchar();
}



Reporte



Recursion
La recursion es una tecnica utilizada para resolver problemas complejos sirve para se podria decir simplificarlos ya que
se dividen en partes haciendolos mas sencillos. Un Algoritmo recursivo es aquel que en una funcion se encuentra definido
en terminos de si mismo esto quiere decir que el valor que se devuelve al final es el mismo del inicio.
Un ejemplo puede ser en un programa cuando se pide un valor entero y el algoritmo como resultado debe escribir
los numeros de una forma vertical este vendria siendo el algoritmo
// ALGORITMO: escribaVerticalmenteDígitos(númeroEntero)
if (númeroEntero tiene un solo dígito)
print(númeroEntero)
else { escribaVerticalmenteDígitos(númeroEntero/10)
print(númeroEntero % 10)
}

Bueno en esta ocasión como ya todos savemos, la profesora al designarnos un equipo, tuvimos que trabajar como tal, un muy buen equipo. En todo equipo cada quien contribuye y pone un granito de arena para desarrollar un buen trabajo , en esta ocasión no fue la esepción. El haber trabaado en equipo me dejó muy buena experiencia, agradezco a cada miembro del equipo por contribuir con el proyecto.

Espero les sea de agrado nuestro proyecto, sin mas por el momento les deseo unas felices vacaciones de semana santa.

Aquí les dejo el link de los mimbros del equipo

Rodolfo Aguirre

Abraham

Cristian Estrada

Link de la presentación
http://rapidshare.com/files/363496541/PROYECTO.pptx

Bye...

sábado, 6 de marzo de 2010

Proyecto #3 Generación de elementos de la serie de Fibonacci.

Bueno amigos en este tercer proyecto de algoritmos, la profesora Elisa nos repartió distintos temas, a nuestro equipo en específico nos tocó el tema de la serie de Fibonacci.

Dando un pequeño detalle de sobre el porqué se nombra serie de Fibonacci, éste nombre se le da en honor a Leonardo de Pisa (apodado Fibonacci), descrubrió la secuencia cuando calculaba la expanción de población de conejos.





De esta forma se obtiene la secuencia: 1,1,2,3,5,8,13...Esta secuencia es la secuencia de Fibonacci
En la cual claramente podemos observar que cuaquier elemento de la secuencia está definido como la suma de los dos elementos anteriores.

Los matemáticos describen ésto como:




Ésta es una función recursiva , se comienza con 0 y 1, y luego cada número es la suma de los dos anteriores.

Éstas funciones pueden ser calculadas en computación con las máquinas turing, las cuales ya practicamos en clase con la profesora Elisa.

Entre más grandes sean los números de la secuencia de Fibonacci que se dividan, es mayor la precisión que logra de la proporción de oro. También entre más grandes sean los números de la secuencia de Fibonacci que se dividan, dos divisiones consecutivas tendrán casi el mismo valor.

1,1,2,3,5,8,13,21,34


1/1, 2/1, 3/2, 5/3, 8/5, 13/8, 21/13, 34/21

Llegaremos al número conocído como la proporción áurea o proporción de oro.

El diagrama de la serie Fibonacci se representa de la sig. forma:








Récursión:

En programación es cuando un módulo se invoca a sí mismo y a cada llamada al modulo se disminuye la dificultad hasta que ya no es necesario hacerlo y el problema se puede calcular fácilmente, por ejemplo se usa para hallar factoriales.



Cuando calculamos el número fibonacci recursivamente, internamente se está consumiendo espacio en pila, este espacio crece mucho conforme aumentamos la posición del número Fibonacci.




En conclusión calcular el número Fibonacci recursivamente no esla mejor forma, esto se hace a través de una estructura iterativa.


A continuación les presento el código que resuelve este problema iterativamente, en ella defino dos funciones: el primero para reportar el num. fibonacci indicada por "n", y el segundo para los num. hasta la posición "n"






Bueno aqui les dejo el link de un video que en lo personal me gustó mucho...

http://www.youtube.com/watch?v=yrb8QCjVrqI


mis compañeros de equipo son:

Rodolfo Aguirre

Abraham

Cristian Estrada



Sin mas que comentar por el momento... espero les guste mi proyecto #3

Bye...

jueves, 4 de marzo de 2010

Proyecto #2 Compañía de Encuestas Teléfonicas

Bueno en este segundo proyecto la profesora Elisa nos encargó un problema de optimización en la literatura.
En general amigos un problema de optimización está definido porun espacio de candidatos de la solución y una función de valoración que se busca minimizar o maximizar. Dado que la meta fundamental de un inversionista es asignar óptimamente sus inversiones entre las diferentes opciones, en este caso se tendrá como espacio de candidatos de la solución a la gama de activos existentes que cotizan en la bolsa de valores y como función objetivo se tendrá que minimizar el riesgo de cartera, medido por la varianza de los precioes de las acciones en la misma, sujeta a un nivel esperado de rendimientos finales.
Al tener en cuenta las restricciones a las que se encuentra el inversionista, la búsqueda de soluciones factibles se convierte en un problema de complejidad NP (No determinado como polinomial).
Todo modelo by lineal se puede escribir de la forma:

Donde x=(x1,...xn) ER^n definen las variables de decisión. En este problema se tienen restricciones de desigualdad y L restricciones de igualdad. Además ri y r... son restricciones de caja para cada una de las variables. Por notación se dirá que la región factible es


Una compañía de encuestas teléfonicas ha sido contratada para llevar a cabo una encuesta sobre hábitos televisivos entre las familias de las zonas rurales y urbanas de una ciudad determinada. El cliente ha determinado que se deben entrevistar a 150 familias, entre ellas mínimo 30 deben ser de zonas rurales y máximo 60. De las familias de la zona urbana se deben entrevistar como mínimo 40 y máximo 100. Por este servicio, la empresa recibe $6.000 por cada entrevista a familias de la zona rural y $5.000 por cada entrevista a las familias de zona urbana.

Por la experiencia obtenida anteriormente, se determina que la compañía realizará un gasto de
$2.500 por cada llamada a las zonas rurales y $2.000 a zonas urbanas y sólo se dispone de $320.000 para realizar dichas llamadas.
En este caso las variables de decisión son:
-x: número de llamadas a familias de zonas rurales
-y: número de llamadas a familias de zonas urbanas

El modelo matemáctico que representa a esta situación es :

max z =3500x+3000y
x+y=150
30<- x <-60
40<-y<-100
2500x+2000y<-320000


Para esto el cliente permite que el numero de entrevistados pueda estar entre 140 y 155. Además , que el máximo numero de familias a entrevistar de la zona rural sea de 65.
Por lo cual se puede ver como un problema de optimización con dos objetivos.

max z= (3500x + 3000y, lambda)
150-(1-lambda)10<-x+y<-150+(1-lambda)5
30<-x<-60+(1-lambda)5
40<-y<-100
2500x+2000y<-320000




En la siguiente tabla se describen las soluciones obtenidas.

A partir de lambda = 0,7 no se obtienen puntos factibles. Es decir, el máximo valor de pertenencia obtenido en la intersección de todas las restricciones es o,6.
Bueno esto es todo por mi parte, espero les haya gustado este segundo proyecto, que pasen buen fin de semana.
Bye.

viernes, 19 de febrero de 2010

Proyecto #1

1º Proyecto

Este es el diagrama de flujo que soluciona el problema de "Elegir entre posibles

objetos de valor cuáles llevar a un viaje en una mochila con capacidad límitada".

1- Lo primero que hice, fue poner:
- Un imput que me imprima de que se trata el diagrama
- Después declaré los
artículos como (navaja,comida,ropa, etc)

2-Puse un loop para poder hacer ciclo que en c es como si pusiéramos un "for".






3-Después puse los asignment que realizen las operaciones de suma entre la comida, herramientas.







4- Fin




Y por último pongo el link del blog de mi compañero : Ernesto Méndez Govea