2012-03-26 19 views
7

मैं वर्तमान में Javascript में एक ट्री-मैप एल्गोरिथ्म को लागू करने की कोशिश कर रहा हूँ में एक squarified ट्री-मैप को लागू करने। अधिक विशेष रूप से Squarified Treemaps में वर्णित एल्गोरिदम। छद्म दिया कोड ऐसा दिखाई देता है:जावास्क्रिप्ट

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 

हालांकि मेरी जावास्क्रिप्ट की तरह दिखता है:

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

जहां तक ​​मैं अपने कोड बता सकते हैं ठीक से काम करता है, लेकिन असमानता के आसपास गलत तरीका है। मुझे लगता है कि मैं अपने कार्यान्वयन में कुछ दिख रहा हूं, या असमानता छद्म कोड में गलत तरीके से है? धन्यवाद

+0

शायद दोष की 'सबसे खराब()' अपने कार्यान्वयन में है। – gilly3

+3

प्रतिक्रिया के लिए धन्यवाद। मैंने सबसे खराब के कार्यान्वयन पर काफी बारीकी से देखा है, और जहां तक ​​मैं यह कह सकता हूं कि यह सबसे खराब अनुपात सही ढंग से लौटाता है। दिलचस्प बात यह है कि [ब्लॉग पोस्ट] (http://jectbd.com/?p=271) में असमानता दूसरी तरफ प्रतीत होती है, इसलिए मुझे संदेह करना शुरू हो रहा है कि छद्म कोड गलत है। – user414310

+0

क्षमा करें, ब्लॉग पोस्ट को पढ़ना चाहिए था, सिर्फ कोड ही नहीं। यह वास्तव में असमानता की तरह दिखता है कि गलत तरीका है। – user414310

उत्तर

4

आप ऐसा करते हुए पहलू अनुपात यानी सुधार होगा जब

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

मैं हाल ही में है कि टाइपप्रति में एल्गोरिथ्म को लागू करता है और शामिल GitHub पर कोड का एक टुकड़ा प्रतिबद्ध गया है वर्तमान row को c जोड़ना चाहते हैं रेडी-टू-उपयोग जावास्क्रिप्ट:

https://github.com/nicnguyen/treemap

0

आप केवल लेआउट कलन विधि में रुचि रखते हैं, मेरे squarify NPM पैकेज की जाँच करें। यह केवल लेआउट डेटा देता है, जो आपको परिणाम देने के लिए स्वतंत्र करता है, हालांकि आप चाहते हैं।