2012-03-26 8 views
7

Actualmente estoy tratando de implementar un algoritmo treemap en Javascript. Más específicamente, el algoritmo descrito en Squarified Treemaps. El pseudo código dada tiene el siguiente aspecto:Implementación de un mapa de árbol squarificado en javascript

procedure squarify(list of real children, list of real row, real w) 
begin 
    real c = head(children); 
    if worst(row, w) <= worst(row++[c], w) then 
     squarify(tail(children),row++[c], w) 
    else 
     layoutrow(row); 
     squarify(children,[], width()); 
    fi 
end 

sin embargo mi JavaScript parece:

var c = children[0]; 
if (worst(row, w) >= worst(row.concat(c), w)) { 
    this.squarify(children.splice(1), row.concat(c), w); 
} else { 
    layoutrow(row); 
    this.squarify(children, [], width()); 
} 

Por lo que yo puedo decir a mi código funciona correctamente, pero la desigualdad es al revés. Supongo que estoy pasando por alto algo en mi implementación, ¿o está la desigualdad al revés en el pseudo código? Gracias

+0

Quizás la falla está en su implementación de 'worst()'. – gilly3

+3

Gracias por los comentarios. He examinado bastante de cerca mi implementación de las peores, y hasta donde puedo decir, devuelve la peor relación correcta. Curiosamente, una [publicación de blog] (http://jectbd.com/?p=271) parece tener la desigualdad en el otro sentido, así que estoy empezando a sospechar que el pseudocódigo es incorrecto. – user414310

+0

Lo siento, debería haber leído la publicación del blog, no solo el código. De hecho, parece que la desigualdad es el camino equivocado. – user414310

Respuesta

4

desea agregar c a la corriente row al hacerlo mejorará la relación de aspecto es decir, cuando

worst(row++[c], w) < worst(row, w) 

recientemente he cometido un fragmento de código en GitHub que implementa el algoritmo a máquina e incluye listos para el uso de JavaScript:

https://github.com/nicnguyen/treemap

0

Si sólo estás interesado en el algoritmo de diseño, echa un vistazo a mi paquete squarify NPM. Devuelve solo los datos de diseño, dejándote libre para mostrar el resultado como quieras.

Cuestiones relacionadas