lunes, 10 de septiembre de 2012

Edsger Dijkstra Wybe


Edsger Wybe Dijkstra nació el 11 de mayo de 1930 en Rotterdam, Holanda, hijo de un químico y una matemática. Estudio física y matemáticas en la Univ. de Leyden  terminando en 1951. Más tarde, un doctorado en física teórica en la misma universidad en 1956,  seguido de un Ph.D. en 1959 en la Univ. de Amsterdam. En 1952 comenzó a trabajar en el Centro Matemático de Amsterdam donde aprendió a programar, siendo el primer programador en Holanda. En 1962 pasó a ser profesor en la Univ. Tecnológica de Eindhoven hasta 1984. En paralelo, desde 1973 a 1984 fue investigador para Burroughs. Finalmente, en 1984 aceptó la cátedra Schlumberger en la Univ. de Texas at Austin, hasta que jubiló en 1999. Finalmente, el mes pasado, enfermo de cáncer, murió en Nuenen, Holanda. Dijkstra se casó en 1957 con Maria Debets (más conocida como Ria) y tuvo tres hijos: Marcus, Femke y Rutger, el único que siguió sus pasos en la computación. 

Poco después de su muerte en el 2002, recibió la distinción ACM PODC Influential Paper Award en computación distribuida por su trabajo en la auto-estabilización en programas computacionales. Este premio fue renombrado a Premio Dijkstra el siguiente año en su honor.

El trabajo de Dijkstra siempre se ha caracterizó por su elegancia y simplicidad, sin comprometer el rigor de su investigación con consideraciones económicas, políticas o administrativas. Contaba el mismo que al preguntarle a su madre cuán difícil eran las matemáticas, ella le contestó: "aprende todas las fórmulas y que si alguna vez necesitaba 
más de cinco líneas para demostrar algo, estaba en el camino equivocado". En 1972 recibió el premio Turing, y su discurso fue publicado en un artículo titulado "The Humble Programmer" (el programador humilde) ese mismo año en Communications of the ACM. Recientemente, en esta misma revista, publicaba un artículo corto titulado "The End of Computing Science?" (El Fin de la Computación), donde recalcaba que el objetivo principal de la computación, ¿Cómo no convertir un programa en un caos?, todavía no se había logrado.

A veces Dijkstra criticaba en forma franca y directa, para muchos de manera arrogante, incluso en público. Para los que lo conocían mejor, sabían que no era nada personal, sólo su forma de ser. Por dar un ejemplo, según el, la pregunta de si los computadores podían aprender a pensar, era como preguntar si los submarinos podían aprender a nadar. Dijkstra gustaba de viajar por parques nacionales en un bus que llamaba el Touring Machine junto a su familia y tocar a Mozart en el piano. Para terminar, otra cita de Dijkstra (introducción a un curso de cálculo en 1995):  “Si en 10 años más, cuando ustedes estén haciendo algo rápido y sucio, repentinamente visualizan que yo estoy mirando por sobre sus hombros y se dicen a si mismos, - a Dijkstra no le hubiera gustado esto -, eso sería suficiente inmortalidad para mi". 

El premio Turing otorgado por la ACM (Association for Computing Machinery, EEUU) es considerado el equivalente al premio Nobel de la computación. El primero de ellos fue entregado en 1966 y hasta la fecha diez de nuestros próceres 
ya no nos acompañan. Casualmente, cuatro de ellos fallecieron en un lapso menor a 45 días: el 29 de Junio, Ole-Johan Dahl; el 16 de Julio, John Cocke; el 6 de Agosto, Dijkstra; y el 10 de Agosto, Kristen Nygaard. John Cocke fue uno de los principales diseñadores de las arquitecturas RISC. Ole-Johan y Kristen fueron los desarrolladores de Simula, el precursor de los lenguajes de programación orientados a objetos,  tema del próximo mes. Hoy dedicaremos estas líneas a Dijkstra, quién contribuyó al desarrollo de la computación en muchas áreas distintas.

Dijkstra escribió más de 1300 artículos, pero indudablemente hay tres contribuciones cuyo impacto está presente en numerosos ámbitos de la computación moderna:

Algoritmo para encontrar el camino más corto en un grafo: este fue el primer problema de grafos que resolvió Dijkstra en 1956 y publicado en 1959 por que en esa época un algoritmo era difícilmente considerado un logro científico. Hoy en día, este algoritmo ha sido usado como la base para protocolos de enrutamiento en Internet, sistemas de posicionamiento global o simplemente para itinerarios de viaje.
 
El concepto de abrazo mortal (deadlock) y su solución a través de semáforos y regiones de código con acceso exclusivo. Dijkstra describió el problema con la cena de los famosos cinco filósofos que sólo tenían cinco palillos para comer arroz (ver figura). Si ellos no se ponían de acuerdo y tomaban un palillo cada uno, creaban un deadlock y morían de hambre pues se necesitaban dos palillos para comer. Esta es la base de la programación concurrente y una parte fundamental de cualquier sistema operativo.

Su aporte a la programación estructurada. Dijkstra participó en el comité que diseño Algol 60, el primer lenguaje de programación estructurado, y lo promovió intensamente fomentando la verificación formal de programas y la eliminación del goto. En este tema fue autor y coautor de varios libros, además de su artículo corto  "Go To statement considered harmful" (La instrucción go to es considerada dañina) publicado en Communications of ACM en 1968, que es legendario.
Referencias:
  • "Edsger Dijkstra." - Wikipedia, La Enciclopedia Libre. N.p., n.d. Web. 10 Sept. 2012. <http://es.wikipedia.org/wiki/Edsger_Dijkstra>.
  • "Edsger Wybe Dijkstra (1930-2002)." Edsger Wybe Dijkstra (1930-2002). N.p., n.d. Web. 10 Sept. 2012. <http://users.dcc.uchile.cl/~rbaeza/inf/dijkstra.html>. 
    Imagen obtenida 
    • "Edsger Wybe Dijkstra (1930-2002)." Edsger Wybe Dijkstra (1930-2002). N.p., n.d. Web. 10 Sept. 2012. <http://users.dcc.uchile.cl/~rbaeza/inf/dijkstra.html>. 

    ¿Quién inventó el algoritmo de Kruskal?

    Joseph Bernard Kruskal


    Joseph Bernard Kruskal, Jr. (29 en junio 1928 a 19 septiembre 2010).era un americano matemáticoestadísticoinformático y de psicometría. El era un estudiante de la Universidad de Chicago y en la Universidad de Princeton, donde completó su doctorado en 1954, nominalmente bajo Albert W. Tucker y Lyndon Roger, pero de facto en Erdős Pablo, con quien tuvo dos conversaciones muy cortas. Kruskal ha trabajado en bien cuasi-ordenamientos y el escalamiento multidimensional .
    El era un miembro de la American Statistical Association, expresidente de la Sociedad psicométrica, y expresidente de la Sociedad de Clasificación de América del Norte. También inició y fue el primer presidente del Consejo de Vivienda Justa de South Orange y Maplewood en 1963, y apoyó activamente los derechos civiles en varias otras organizaciones.
    En las estadísticas, la obra más influyente de Kruskal es su contribución fundamental a la formulación de escalamiento multidimensional . En informática, su trabajo más conocido es el algoritmo de Kruskal para el cálculo del árbol de expansión mínima (MST) de un grafo ponderado . Las órdenes primer algoritmo de los bordes en peso y luego procede a través de la lista ordenada añadir un borde para el MST parcial, siempre que la adición de la nueva ventaja no se crea un ciclo. Árboles de expansión mínima tiene aplicaciones en la construcción y los precios de las redes de comunicación. Kruskal también se aplica a su trabajo en lingüística, en un experimental lexicostatistical estudio de la Indo-Europea idiomas, junto con los lingüistas Dyen Isidoro y Pablo Negro. Su base de datos sigue siendo ampliamente utilizado (disponible en el enlace de abajo).
    Kruskal nació en Nueva York a un mayorista de pieles con éxito, Joseph B. Kruskal, Sr. Su madre, Lillian Rose Vorhaus Kruskal Oppenheimer , se convirtió en un promotor conocido de Origami en la época temprana de la televisión. Murió en Princeton .
    Joseph Kruskal no se debe confundir con sus dos hermanos Martin David Kruskal (1925-2006, co-inventor de solitones y números surreales) y William Kruskal (1919-2005, desarrolló la prueba de Kruskal-Wallis de una vía de análisis de varianza).

    Referencias:
    • "Joseph Kruskal." Wikipedia. Wikimedia Foundation, 17 Aug. 2012. Web. 10 Sept. 2012. <http://en.wikipedia.org/wiki/Joseph_Kruskal>. .
    Imagen obtenida:
    •  Joseph Bernard Kruskal. N.p., n.d. Web. 10 Sept. 2012. <http://memorod.blogspot.mx/2011/10/joseph-bernard-kruskal.html>.  

    ¿Quién inventó el algoritmo de Prim?

    Robert C. Prim


    Robert C. Prim (1921, Sweetwater, Estados Unidos) es un matemático e ingeniero informático. 

    En 1941 se licenció en ingeniería eléctrica en la Universidad de Princeton. Más tarde, en 1949 recibe su doctorado en matemáticas en la misma universidad. Trabajó en dicha universidad desde1948 hasta 1949 como investigador asociado. 

    En plena Segunda Guerra Mundial, Prim trabajó como ingeniero para General Electric. Desde 1944 hasta 1949 fue contratado por la United States Naval Ordnance Lab como ingeniero y más tarde como matemático. En los laboratorios Bell, trabajó como director de investigación matemática desde 1958 hasta 1961. Allí Prim desarrolló el conocido Algoritmo de Prim. Después de su estancia en los laboratorios Bell, Prim pasó a ser vicepresidente de investigación en Sandia National Laboratories 

    Durante su carrera en los laboratorios Bell, Robert Prim junto a su compañero Joseph Kruskal desarrolló dos algoritmos diferentes para encontrar los árboles abarcadores mínimos en un grafo ponderado. El algoritmo que lleva su nombre fue originalmente descubierto por el matemático Vojtech Jarnik y más tarde e independientemente por Prim en 1957. Dos años más tarde fue redescubierto por Edsger Dijkstra. 

    El algoritmo de Prim es un algoritmo perteneciente a la teoría de los grafos para encontrar un árbol recubridor mínimo en un grafo conexo, no dirigido y cuyas aristas están etiquetadas. En otras palabras, el algoritmo encuentra un subconjunto de aristas que forman un árbol con todos los vértices, donde el peso total de todas las aristas en el árbol es el mínimo posible. Si el grafo no es conexo, entonces el algoritmo encontrará el árbol recubridor mínimo para uno de los componentes conexos que forman dicho grafo no conexo.
    El algoritmo fue diseñado en 1930 por el matemático Vojtech Jarnik y luego de manera independiente por el científico computacional Robert C. Prim en 1957 y redescubierto por Dijkstra en 1959. Por esta razón, el algoritmo es también conocido como algoritmo DJP o algoritmo de Jarnik.

    El algoritmo incrementa continuamente el tamaño de un árbol, comenzando por un vértice inicial al que se le van agregando sucesivamente vértices cuya distancia a los anteriores es mínima. Esto significa que en cada paso, las aristas a considerar son aquellas que inciden en vértices que ya pertenecen al árbol. El árbol recubridor mínimo está completamente construido cuando no quedan más vértices por agregar.

    Referencias:
    • "Robert C. Prim." - Wikipedia, La Enciclopedia Libre. N.p., n.d. Web. 10 Sept. 2012. <http://es.wikipedia.org/wiki/Robert_C._Prim>.
    • N.p., n.d. Web. 10 Sept. 2012. <http://es.wikipedia.org/wiki/Algoritmo_de_Prim>.
    Imagen obtenida:
    • "Robert C Prim." Magick, Wicca, Paganism and Other Esoteric Knowledge. N.p., n.d. Web. 10 Sept. 2012. <http://www.realmagick.com/robert-c-prim/>. 


    Tarea 1 Tríptico de un Problema de Transporte

    miércoles, 5 de septiembre de 2012

    Participación 12 Resolución de problemas de asignación

    Doc Concillman reúne a un equipo de relevos para el relevo de 400 metros. Cada nadador debe nadar 100 metros de brazada de pecho, dorso, mariposa o estilo libre. Doc cree que cada nadador obtendrá los tiempos en segundos dados en la tabla. ¿Qué nadador debe nadar que estilo?


    Nadador
    Libre
    Pecho
    Mariposa
    Dorso
    Gary
    54
    54
    51
    53
    Mark
    51
    57
    52
    52
    Jim
    50
    53
    54
    56
    Chet
    56
    54
    55
    53






    Participación 10 Resolución de problemas de transbordo

    Un problema de transporte consiste ñeque dos fábricas abastecen cierto artículo a tres tiendas. La cantidad de unidades ofrecidas en las fuentes 1 y 2 es 200 y 300; la que piden las tiendas 1,2 y 3 es de 100,200 y 50 respectivamente. Las unidades se pueden transbordar entre las fábricas y las tiendas, antes de llegara su destino final. Determinar el programa óptimo de transporte con base a los costos unitarios que se muestran a continuación: (Resuelve ejercicio)

    Fábrica
    Tienda
     
    1
    2
    1
    2
    3
    Fábrica 1
    $0
    $6
    $7
    $8
    $9
    Fábrica 2
    $6
    $0
    $5
    $4
    $3
    Tienda 1
    $7
    $2
    $0
    $5
    $1
    Tienda 2
    $1
    $5
    $1
    $0
    $4
    Tienda 3
    $8
    $9
    $7
    $6
    $0

    Balanceamos la tabla:

    Encontramos la solución inicial mediante Vogel


    Buscamos la v. de entrada


    Buscamos la v. de salida creando un ciclo


    Encontramos que la variable de salida es X32 y continuamos con el algoritmo hasta encontrar que la solución es:



    Participación 8 Resolución de problemas de transporte

    Se hace un mantenimiento preventivo periódico a motores de aviones, donde se debe cambiar un componente importante. La cantidad de motores programados para ese mantenimiento, durante los seis meses siguientes, se estima en 200, 180, 300, 198, 230 y 290 respectivamente. Todo el trabajo de mantenimiento se hace durante los dos primeros días del mes, cuando se puede cambiar un componente usado por uno nuevo, o por un componente reconstruido. La reconstrucción de los componentes usados se puede hacer en un taller local, y cuando salen están listos para usarse al principio del mes siguiente, o bien se pueden mandar a un taller central y en ese caso hay una espera de tres meses (que incluye al mes en que se hace el mantenimiento). El costo de reparación en el taller local es de $120 por componente. En el taller central el costo sólo es de $35 por componente. Un componente reconstruido que se usa en algún mes posterior causará un costo adicional de almacenamiento de $1.50 por unidad y por mes. Los componentes nuevos se pueden comprar a un costo de $200 cada uno, en el mes 1 y con 5% de aumento en el precio cada dos meses. Formular el problema, resolverlo utilizando algún paquete computacional. 

    Planteamos la tabla de transporte


    Aplicamos Vogel para encontar la solución básica


    Aplicamos el método de multiplicadores para encontrar la variable de entrada


    Como todos los valores de las variables son negativos, quiere decir que encontramos la solución optima que es:


    Comparamos los resultados con los de un paquete computacional en esta caso WINQSB




    Los resultados son iguales lo cual quiere decir que:

    200 motores el mes 1 para el mes 1
    200 motores el mes 1 para el mes 2
    200 motores el mes 1 para el mes 3
    200 motores el mes 2 para el mes 4
    200 motores el mes 3 para el mes 5
    200 motores el mes 4 para el mes 6

    Con un costo de: $97 230.00