2017-04-18 37 views
6

Deneysel bir OOP dili uyguladım ve şimdi bir Storage benchmark kullanarak çöp toplama işlemini karşılaştırdım. Şimdi küçük derinlikler için aşağıdaki kriterleri kontrol etmek/yazdırmak istiyorum (n = 2, 3, 4, ..).Bir test noktasını kontrol etmek için 4 düğümlü Ağacı (basit orman)

Ağaç (4 alt sıranlı orman) buildTreeDepth yöntemiyle üretilir.

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 tarafından oluşturulan ağacı baskı biraz basit/yalındır yolu var mı şu şekildedir: kodudur? Sadece n = 3, 4, 5.

+0

Not: Ağacı yazdırmak istiyorum, böylece deney dili için oluşturduğum aynı ağaç olduğundan emin olduğumu biliyorum. – mrsteve

+0

Bu soru, durduğu kadar geniş gözüküyor. Sizin için bir grafik veya ASCII ağacı oluşturabilen 100 Java API'sı varsa şaşırmam. Muhtemel yinelenen - [Bağlı düğümlerin bir grafiğini temsil eden bir ağaç nasıl çizilir?] (Http://stackoverflow.com/questions/10126695/how-to-draw-a-tree-representing-a-graph-of-connected- düğümler – Dukeling

+0

Aradığınız çıktının nasıl görüneceğine dair bir örnek ekleyebilir misiniz? – eitanfar

cevap

1

Sadece kısa ağaçları önerdiği gibi, bunu yapmak için bazı lib tercih edebilirsiniz. Ancak sadece komut satırında test etmek için basit bir algoritma istiyorsanız, komut satırında ağaç yazdırırken her zaman kullandığım aşağıdakileri yapabilirsiniz (tutamacına yazma, bazı hatalar olabilir. Bu BFS algo çalışmasının ne olduğunu anlayabilirsiniz.):

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

Örnek çıktı:

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 
... 

Ve yazdırmak daha kolay görünüyor dizi kullanın durumda

.

1

Nesne dizileri kullanmak yerine, ArrayList gibi bir Liste uygulamasını kullanın. ArrayList'in daha iyi bir sonuç alt sınıfı için de 'level' değeri tutması ve toString() yöntemine girinti eklemesi.

İlgili konular