2017-04-18 46 views
6

की जांच के लिए 4 नोड्स (सरल वन) के साथ प्रिंट ट्री प्रिंट करें, मैंने एक प्रयोगात्मक ओओपी भाषा लागू की है और अब Storage benchmark का उपयोग करके बेंचमार्क कचरा संग्रह लागू किया है। अब मैं छोटी गहराई के लिए निम्नलिखित बेंचमार्क को जांच/प्रिंट करना चाहता हूं (एन = 2, 3, 4, ..)।बेंचमार्क

पेड़ (4 सबनोड के साथ जंगल) buildTreeDepth विधि द्वारा उत्पन्न होता है।

import java.util.Arrays; 

public final class StorageSimple { 

    private int count; 
    private int seed = 74755; 

    public int randomNext() { 
     seed = ((seed * 1309) + 13849) & 65535; 
     return seed; 
    } 

    private Object buildTreeDepth(final int depth) { 
     count++; 
     if (depth == 1) { 
      return new Object[randomNext() % 10 + 1]; 
     } else { 
      Object[] arr = new Object[4]; 
      Arrays.setAll(arr, v -> buildTreeDepth(depth - 1)); 
      return arr; 
     } 
    } 

    public Object benchmark() { 
     count = 0; 
     buildTreeDepth(7); 
     return count; 
    } 

    public boolean verifyResult(final Object result) { 
     return 5461 == (int) result; 
    } 


    public static void main(String[] args) { 
     StorageSimple store = new StorageSimple(); 
     System.out.println("Result: " + store.verifyResult(store.benchmark())); 
    } 
} 

वहाँ buildTreeDepth द्वारा उत्पन्न पेड़ मुद्रित करने के लिए कुछ हद तक एक सरल/सीधे आगे रास्ता नहीं है: कोड इस प्रकार है? एन = 3, 4, 5 के छोटे पेड़।

+0

पीएस: मैं पेड़ मुद्रित करना चाहता हूं ताकि मुझे पता चले कि यह वही पेड़ है जिसे मैंने अपनी प्रयोगात्मक भाषा के लिए बनाया है। – mrsteve

+0

यह सवाल बहुत व्यापक लगता है क्योंकि यह खड़ा है। अगर 100 जावा एपीआई हैं जो आपके लिए ग्राफिकल या एएससीआईआई पेड़ उत्पन्न कर सकती हैं तो मुझे आश्चर्य नहीं होगा। संभावित डुप्लिकेट - [कनेक्टेड नोड्स के ग्राफ का प्रतिनिधित्व करने वाले पेड़ को कैसे आकर्षित करें?] (Http://stackoverflow.com/questions/10126695/how-to-draw-a-tree-representing-a-graph-of-connected- नोड्स) – Dukeling

+0

क्या आप एक उदाहरण जोड़ सकते हैं कि आप जिस आउटपुट की तलाश में हैं, वह कैसा दिखता है? – eitanfar

उत्तर

1

जैसा कि पहले से ही सुझाव दिया गया है, आप ऐसा करने के लिए कुछ lib चुन सकते हैं। लेकिन अगर आप कमांड लाइन में परीक्षण करने के लिए एक साधारण अलगो चाहते हैं, तो आप निम्न कार्य कर सकते हैं, जिसे मैं हमेशा कमांड लाइन में पेड़ प्रिंट करते समय उपयोग करता हूं (हैंडल द्वारा लिखने के लिए, कुछ बग हो सकता है। मान लीजिए कि यह बीएफएस अलगो काम करता है):

queue.add(root); 
queue.add(empty); 
int count = 1; 
while (queue.size() != 1) { 
    Node poll = queue.poll(); 
    if (poll == empty) { 
     count = 1; 
     queue.add(empty); 
    } 
    for (Node n : poll.getChildNodes()) { 
     n.setNodeName(poll.getNodeName(), count++); 
     queue.add(n); 
    } 
    System.out.println(poll.getNodeName()); 
} 

नमूना उत्पादन:

1 
1-1 1-2 1-3 1-4 
1-1-1 1-1-2 1-1-3 1-2-1 1-2-2 1-3-1 1-3-2 1-4-1 
... 

और तुम सरणी है, जो भी मुद्रित करने के लिए आसान लगता है का उपयोग अपने मामले में।

1

ऑब्जेक्ट सरणी का उपयोग करने के बजाय, ArrayList जैसे सूची कार्यान्वयन का उपयोग करें। एक बेहतर बेहतर परिणाम subclass ArrayList के लिए 'स्तर' मान भी पकड़ने और toString() विधि में इंडेंटेशन जोड़ने के लिए।

संबंधित मुद्दे