Advertisement
Guest User

Untitled

a guest
Feb 5th, 2014
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.43 KB | None | 0 0
  1. import org.openjdk.jmh.annotations.*;
  2.  
  3. import java.util.ArrayDeque;
  4. import java.util.Queue;
  5. import java.util.concurrent.TimeUnit;
  6.  
  7. @State(Scope.Thread)
  8. @Fork(1)
  9. @BenchmarkMode(Mode.AverageTime)
  10. @OutputTimeUnit(TimeUnit.NANOSECONDS)
  11. public class Graph {
  12.     private int[][] g;
  13.     private static final int SIZE = 10;
  14.  
  15.     @Setup
  16.     public void setup() {
  17.         g = new int[][] {
  18.                 {0, 1, 0, 0, 0, 0, 0, 1, 1, 0},
  19.                 {1, 0, 1, 1, 0, 0, 1, 0, 1, 0},
  20.                 {0, 1, 0, 0, 0, 0, 0, 0, 0, 1},
  21.                 {0, 1, 0, 0, 1, 0, 1, 0, 0, 0},
  22.                 {0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
  23.                 {0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
  24.                 {0, 1, 0, 1, 0, 1, 0, 1, 0, 1},
  25.                 {1, 0, 0, 0, 0, 0, 1, 0, 1, 0},
  26.                 {1, 1, 0, 0, 0, 0, 0, 1, 0, 0},
  27.                 {0, 0, 1, 0, 0, 0, 1, 0, 0, 0}
  28.         };
  29.  
  30.  
  31.     }
  32.  
  33.     private class DfsRunner {
  34.         boolean[] visited;
  35.  
  36.         public DfsRunner() {
  37.             visited = new boolean[SIZE];
  38.         }
  39.  
  40.         public void run(int v) {
  41.             visited[v] = true;
  42.             for (int u = 0; u < SIZE; u++) {
  43.                 if (g[v][u] == 1 && !visited[u]) {
  44.                     run(u);
  45.                 }
  46.             }
  47.         }
  48.     }
  49.  
  50.     @GenerateMicroBenchmark
  51.     public boolean dfs() {
  52.         DfsRunner dfsRunner = new DfsRunner();
  53.         dfsRunner.run(0);
  54.         for (int i = 0; i < SIZE; i++) {
  55.             if (!dfsRunner.visited[i]) return false;
  56.         }
  57.         return true;
  58.     }
  59.  
  60.     @GenerateMicroBenchmark
  61.     public boolean bfs() {
  62.         boolean[] visited = new boolean[SIZE];
  63.  
  64.         Queue<Integer> queue = new ArrayDeque<>();
  65.         queue.add(0);
  66.  
  67.         while (!queue.isEmpty()) {
  68.             int v = queue.poll();
  69.             visited[v] = true;
  70.             for (int u = 0; u < SIZE; u++) {
  71.                 if (g[v][u] == 1 && !visited[u]) {
  72.                     queue.add(u);
  73.                 }
  74.             }
  75.         }
  76.  
  77.         for (int i = 0; i < SIZE; i++) {
  78.             if (!visited[i]) return false;
  79.         }
  80.         return true;
  81.     }
  82. }
  83.  
  84.  
  85. -----------------------------------------------------------------------------
  86. Benchmark           Mode Thr     Count  Sec         Mean   Mean error    Units
  87. c.d.b.Graph.bfs     avgt   1        10    1      727.719        6.730    ns/op
  88. c.d.b.Graph.dfs     avgt   1        10    1      339.698       14.303    ns/op
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement