Add tags

Add tags to the following comment

Javaでやってみました。 MacOSX 10.5、2.5GHz PowerPC G5です。

java -Xmx256m Yang 50 > result 52.79s user 58.27s system 97% cpu 1:53.38 total

出力ルーチンが遅いようで列挙するだけの場合の処理時間は、

java -Xmx256m Yang 50 4.34s user 0.49s system 98% cpu 4.882 total

総数は、204226個でした。 メモリの使用効率はもう少し考えないといけません...

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import java.util.*;

public class Yang{

  ArrayList[] table;

  public Yang(int a){
    table = new ArrayList[a+1];
  }

  public ArrayList partitions(int value){
    ArrayList list = new ArrayList();
    ArrayList l0;
    l0 = new ArrayList();
    l0.add(new Integer(value));
    list.add(l0);
    for(int i = 1; i < value; i++){
      int v = value  - i;
      ArrayList l;
      if(table[i] != null){
     l = table[i];
      }else{
     l = partitions(i);
    table[i] = l;
      }
      Iterator it = l.iterator();
      while(it.hasNext()){
    l0 = (ArrayList)(it.next());
    if(((Integer)(l0.get(0))).intValue() <= v){
      ArrayList l1 = new ArrayList();
      l1.addAll(l0);
      l1.add(0, new Integer(v));
      list.add(l1);
    }
      }
    }
    return list;
  }

  public static void output(ArrayList list){
    Iterator it = list.iterator();
    while(it.hasNext()){
      int v = ((Integer)(it.next())).intValue();
      for(int i = 0; i < v; i++){
    System.out.print("□");
      }
      System.out.println();
    }
  }

  public static void main(String[] args){
    int a = Integer.parseInt(args[0]);
    Yang yang = new Yang(a);
    ArrayList l = yang.partitions(a);
    //System.err.println(l.size());
    Iterator it = l.iterator();
    while(it.hasNext()){
      output((ArrayList)(it.next()));
      System.out.println();
    }
  }

}

Add tags

The input will be splited to tags with space.

Index

Feed

Other

Link

Pathtraq

loading...