domingo, 30 de enero de 2011

Top 500

El día de hoy vamos revisar el top 500 de las computadora mas poderosas
del mundo, en cuanto a cálculos en punto flotante, esta la publica la
pagina top500.org que es como el top 100 de FORBES MAGAZINE o el top 20
de MTV cuando MTV era MTV; las operaciones en punto flotantes por
segundo llamadas FLOPS (FLoating point Operations Per Second) es la
medida de referencia que ordena este grupo de compudoras.

El top lo encabeza la Tianhe-1A vía láctea en chino tradicional del
Centro Nacional de Supercomputadores en Tianjin en China, esa misma
república de la que el mundo occidental se burlaba hace 50 años en sus
películas o comentarios.Después de ella le sigue la bien conocida Cray
XT5 "Jaguar" del departamento de energía de los Estados Unidos después
de ellos los siguen, Nebulae, TSUBAME, Hopper, Tera, todos modelo 2010
uno de ellos del DOE otro de China, uno de Japon y el ultimo en Francia
da Click para conocer una lista mas detallada de los primeros 100.



Tianhe-1A















Jaguar




domingo, 12 de diciembre de 2010

All pairs Shortest paths - Algoritmo de la multiplicación de Matrices

Definamos $W=(w_{ij})$, la matrix de pesos del Grafo $G=(V,E)$ supongamos que $G$ no tiene Ciclos negativos. El problema de encontrar los caminos mas cortos para cualquier par de vertices
de el Grafo $G$ tiene como salida (output) una matrix $D =(d_{ij})$ donde $d_{ij}$ es el peso del camino mas corto desde el vertices $i$ al $j$, en este articulo veremos un primer algoritmos que se asemeja mucho al del multiplicación de matrices.

Este algoritmo, para solucionar el problema, utiliza el paradigma de programación dinámica.

  • Caracterización de la subestructura optima, Consideremos que el camino $p$ de $i$ a $j$ que tiene a lo mas $m$ aristas. Como $G$ no tiene Ciclos negativos $m < \infty$, si $i=j$ entonces $w(p)=0$ y $p$ no tiene aristas, si $i \neq j$ entonces podemos descomponer $p$ en camino que va a un $k$ predecesor de $j$ en $p$, el camino de $i$ a $k$ es el camino mas corto de $i$ a $k$ ya que $p$ lo es de $i$ a $j$
  • Sea $l_{ij} ^{(m)}$ el mínimo peso de un camino de $i$ a $j$ que tiene a lo mas $m$ aristas, cuando $m=0$ existe un camino si y solo si $i=j$.

$l_{ij}=\left\{\begin{array}{cc} 0 & i=j\\ \infty & i\neq j \end{matrix}$

Para $m \geq 1$ $l_{ij}^m$ es el mínimo entre $l_{ij} ^{m-1}$ y el peso de cualquier camino que tenga a lo mas $m$ aristas obtenidos a observar todos los posibles predecesores $k$ de $j$.

$\begin{array}{ll} l_{ij}^{(m)} &=min(l_{ij}^{(m-1)},min_k\{l_{ik} ^{(m-1)} + w_{kj}\}) \\ & =min_k\{l_{ik} ^{(m-1)} + w_{kj}\} \end{array}$

La ultima igualdad se tiene ya que $w _{jj}=0$ para todo $j$.
Como $G$ no tiene Ciclos entonces el camino mas corto de $i$ a $j$ es simple tendrá en el peor de los casos $n-1$ aristas ósea.

$$\delta(ij)=l_{ij} ^{n-1} = l_{ij} ^n = \cdots$$

  • Computemos la serie de matrices $L ^{(1)},L ^{(2)},\ldots ,L ^{(n-1)}$ donde $L ^{(m)}=(l_{ij}^{m})$, la matrix final $L ^{(n-1)}$ contiene los pesos de los caminos mas cortos para cada par $ij$, observe que $L ^{(1)}=W$, el corazón del algoritmo es el siguiente procedimiento llamado:

EXTEND-SHORTED-PATHS que tiene como entrada una matrix $L ^{(m-1)}$ y $W$ y retorna $L ^{(m)}$

ESTEND-SHORTED-PATHS(L,W)
1. $N\leftarrow rows[L]$
2. $L'=(l'_{ij})$
3. for $i \leftarrow 1$ to $n$
4 . do for $j \leftarrow 1$ to $n$
5. do $l' _{ij} \leftarrow \infty$
6. for $k \leftarrow 1$ to $n$
7. do $l' _{ij} \leftarrow min(l' _{i,j}, l_{ij} +w _{kj})$
8 return $L'$

Este procedimiento se escribe sin superíndice para hacer la entrada y la salida independiente de $m$, es claro que este procedimiento pertenece al orden de $O(n^3)$ y si calculamos una a una las matrices $L ^{(m)}$ nos tomara un tiempo de orden $O(n^4)$ lo que es muy costoso, veamos la relación que hay entre este procedimiento y el de multiplicación de matrices. Para calcular la matrix $C=A \cdot B$ tendremos que calcular para todo par $i,j=1,2,\ldots ,n$.

$$c_{ij}=\sum _{k=1} ^{n} a_{ik} \cdot b_{kj}$$

Si hacemos la siguiente sustitución y definimos un semianillo.

$$\begin{array}{cc}+ &\rightarrow min \\ \cdot & + \end{array}$$

podemos redefinir el algoritmo de la multiplicación de matrices calculando cada elemento de la matrix producto como $min_k\{l_{ik} ^{(m-1)} + w_{kj}\})$ teniendo como la matrix identidad:

$$L ^{(0)}=I= \left (\begin{array}{cccc} 0 & \infty & \cdots & \infty \\ \infty & 0 & \cdots & \infty \\ \vdots & \vdots & \ddots & \vdots \\ \infty & \infty & \cdots & 0 \end{array}\right) $$

Gracias a esto podemos calcular las "potencias" $L ^{(m)}$ no de una en una sino en potencias de dos hasta $m=2^{\lfloor lg (n-1) \rfloor} $ya que $\delta(ij)=l_{ij} ^{n-1} = l_{ij} ^n = \cdots$,y con esto disminuir el numero de iteraciones de $O(n^4)$ a $O(n^3lg n)$

viernes, 15 de octubre de 2010

Mis Clases de Analisis de algoritmos

Mi primera impresión en el RUM es de fuerza, constancia, esfuerzo, o como dicen en una región de mi país, "Garra". Son mis primeras clases totalmente en Ingles y al no ser muy bueno para los idiomas mi trabajo es triple con respecto a mis compañeros de clases (excepto Einstein que está en las mismas que yo).

Mi ventaja es que tengo un profesor que nos quiere enseñar y se esfuerza hasta donde su tiempo y su español lo permiten, el es Alemán. En general es una clases bastante interesante, es curioso adentrarse en las entrañas de los algoritmos y entender de manera estructurar su forma de trabajar; esto ayuda a solucionar otros ejercicios que se puedan presentar en mi vida como Científico en computación.

En este articulo adjunto un video de Programacion dinámica que encontré en la pagina del MIT.

Libro Introducion a los algortimos

lunes, 9 de febrero de 2009

solo una pequeña cita "la divina comedia"

Por mí se va ala ciudad del llanto;por mí se va al eterno dolor;por mí se va hacia la raza condenada:la justicia animó a mi sabiduría y el primer amor.Antes que yo no hubo nada creado,a exepcion de lo inmortal,y yo duro eternamente.