/****************************/ /* 線形探索 */ /* coded by Y.Suganuma */ /****************************/ import java.io.*; import java.util.*; // 探索 class Search { long tm1, tm2, tm3; // 配列と線形探索 void linear() { int i1, i2, k, n = 0, ct = 0; int data[] = new int [5000000], s[] = new int [100000]; Random rn = new Random(12345); tm1 = System.currentTimeMillis(); for (i1 = 0; i1 < 5000000; i1++) { k = rn.nextInt(); data[i1] = k; ct++; if (i1%50 == 0 && n < 100000) { s[n] = k; n++; } } tm2 = System.currentTimeMillis(); System.out.printf(" 保存: %d ms\n", tm2-tm1); for (i1 = 0; i1 < n; i1++) { for (i2 = 0; i2 < 5000000; i2++) { if (data[i2] == s[i1]) break; } } tm3 = System.currentTimeMillis(); System.out.printf(" 探索: %d ms\n", tm3-tm2); System.out.printf(" データ数: %d\n", ct); } // ArrayListと線形探索 void linear_v() { int i1, k, n = 0, ct = 0, s[] = new int [100000]; Random rn = new Random(12345); ArrayList<Integer> data = new ArrayList <Integer> (); tm1 = System.currentTimeMillis(); for (i1 = 0; i1 < 5000000; i1++) { k = rn.nextInt(); data.add(k); ct++; if (i1%50 == 0 && n < 100000) { s[n] = k; n++; } } tm2 = System.currentTimeMillis(); System.out.printf(" 保存: %d ms\n", tm2-tm1); for (i1 = 0; i1 < n; i1++) data.indexOf(s[i1]); tm3 = System.currentTimeMillis(); System.out.printf(" 探索: %d ms\n", tm3-tm2); System.out.printf(" データ数: %d\n", ct); } } // main プログラム public class Test { public static void main (String[] args) { Search ss = new Search(); // 配列と線形探索 System.out.printf("配列と線形探索\n"); ss.linear(); // ArrayListと線形探索 System.out.printf("ArrayListと線形探索\n"); ss.linear_v(); } }
配列と線形探索 保存: 84 ms 探索: 251813 ms データ数: 5000000 ArrayListと線形探索 保存: 864 ms 探索: 1711338 ms データ数: 5000000