2012-03-26 7 views
7

Ich versuche derzeit, einen Treemap-Algorithmus in Javascript zu implementieren. Genauer gesagt der in Squarified Treemaps beschriebene Algorithmus. Der Pseudocode gegeben sieht wie folgt aus:Implementieren einer squarified Treemap in 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 

aber mein JavaScript wie folgt aussieht:

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()); 
} 

Soweit ich meinen Code kann sagen, funktioniert einwandfrei, aber die Ungleichheit ist der falsche Weg um. Ich gehe davon aus, dass ich etwas in meiner Implementierung übersehen habe, oder ist die Ungleichheit im Pseudo-Code falsch herum? Dank

+0

Vielleicht ist der Fehler in Ihrer Implementierung von 'schlimmsten()'. – gilly3

+3

Danke für die Rückmeldung. Ich habe meine Implementierung des schlechtesten ziemlich genau betrachtet, und soweit ich das beurteilen kann, gibt es das schlechteste Verhältnis korrekt zurück. Interessanterweise scheint ein [Blogpost] (http://jectbd.com/?p=271) die Ungleichheit anders zu haben, so dass ich anfange zu vermuten, dass der Pseudocode falsch ist. – user414310

+0

Entschuldigung, sollte den Blogbeitrag gelesen haben, nicht nur den Code. Es sieht tatsächlich so aus, als sei die Ungleichheit falsch. – user414310

Antwort

4

Sie wollen c die aktuellen row hinzuzufügen, wenn dabei das Seitenverhältnis, dh zu verbessern, wenn

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

ich vor kurzem habe ein Stück Code auf Github verpflichtet, den Algorithmus in Typoskript implementiert und umfasst ready-to-use JavaScript:

https://github.com/nicnguyen/treemap

0

Wenn Sie in der Layout-Algorithmus nur interessiert sind, überprüfen Sie mein squarify npm Paket aus. Es gibt nur die Layoutdaten zurück, so dass Sie das Ergebnis beliebig darstellen können.