情報学部 | 菅沼ホーム | 目次 | 索引 |
/****************************/ /* ソートと探索 */ /* coded by Y.Suganuma */ /****************************/ #include <time.h> #include <string.h> #include <stdio.h> #include <algorithm> #include <random> #include <vector> #include <set> #include <unordered_map> #include <string> using namespace std; #define N 1000000 #define NS 100000 int main() { // 初期設定 random_device sd; mt19937 rnd(sd()); // // 二分探索( vector ) // // データ設定 int *data = new int [N]; int *data_s = new int [NS]; clock_t tm1 = clock(); int m = 0; for (int i1 = 0; i1 < N; i1++) { int k = rnd(); data[i1] = k; if (i1%10 == 0) { data_s[m] = k; m++; } } // sort clock_t tm2 = clock(); sort(data, data+N); // 二分探索 clock_t tm3 = clock(); int n = 0; for (int i1 = 0; i1 < NS; i1++) { bool b = binary_search(data, data+N, data_s[i1]); if (!b) n++; } clock_t tm4 = clock(); printf("データ数(array): %d,探索データ数 %d\n", N, NS); printf(" data %d ms\n", (int)(tm2-tm1)); printf(" sort %d ms\n", (int)(tm3-tm2)); printf(" 二分探索 %d ms,失敗 %d\n", (int)(tm4-tm3), n); // // 探索木( set ) // // データ設定 set<int> s; tm1 = clock(); m = 0; for (int i1 = 0; i1 < N; i1++) { int k = rnd(); pair<set<int>::iterator, bool> b = s.emplace(k); if (b.second) { if (i1%10 == 0) { data_s[m] = k; m++; } } else i1--; } // 探索 tm2 = clock(); n = 0; for (int i1 = 0; i1 < NS; i1++) { if (s.find(data_s[i1]) == s.end()) n++; } tm3 = clock(); printf("データ数(set): %d,探索データ数 %d\n", N, NS); printf(" data %d ms\n", (int)(tm2-tm1)); printf(" 探索 %d ms,失敗 %d\n", (int)(tm3-tm2), n); // // ハッシュ( unordered_map ) // // データ設定 unordered_map<int, double> um; uniform_real_distribution<> uniform_r(0, 1.0); tm1 = clock(); m = 0; for (int i1 = 0; i1 < N; i1++) { int k = rnd(); double v = uniform_r(rnd); pair<unordered_map<int, double>::iterator, bool> b; b = um.insert(pair<int, double>(k, v)); if (b.second) { if (i1%10 == 0) { data_s[m] = k; m++; } } else i1--; } // 探索 tm2 = clock(); n = 0; for (int i1 = 0; i1 < NS; i1++) { if (um.find(data_s[i1]) == um.end()) n++; } tm3 = clock(); printf("データ数(unordered_map): %d,探索データ数 %d\n", N, NS); printf(" data %d ms\n", (int)(tm2-tm1)); printf(" 探索 %d ms,失敗 %d\n", (int)(tm3-tm2), n); // // 文字列( 配列 ) // int N1 = 1000201; int NS1 = 5000; int NL = 200; // データ設定 char *str1 = new char [N1+1]; char **data_st1 = new char *[NS1]; for (int i1 = 0; i1 < NS1; i1++) data_st1[i1] = new char [NL+1]; n = 0; for (int i1 = 0; i1 < N1; i1++) { str1[i1] = (char)(65 + 58 * uniform_r(rnd)); if (n < NS1 && i1 >= 2*NL && (i1 % NL) == 0) { int k = i1 - NL - NL / 2 - 1; for (int i2 = 0; i2 < NL; i2++) { data_st1[n][i2] = str1[k]; k++; } data_st1[n][NL] = '\0'; if (n % 2 > 0) // 存在しないデータの作成 data_st1[n][NL/2] = '('; n++; } } str1[N1] = '\0'; // 探索 NS1 = n; tm2 = clock(); int n1 = 0; int n2 = 0; for (int i1 = 0; i1 < NS1; i1++) { char *p = strstr(str1, data_st1[i1]); if (p != NULL) n1++; else n2++; } tm3 = clock(); printf("文字数(char): %d,探索データ(数 %d,文字数 %d)\n", N1, NS1, NL); printf(" data %d ms\n", (int)(tm2-tm1)); printf(" 探索 %d ms,成功 %d,失敗 %d\n", (int)(tm3-tm2), n1, n2); // // 文字列( string ) // // データ設定 vector<string> data_st; string str; NS1 = 5000; n = 0; tm1 = clock(); for (int i1 = 0; i1 < N1; i1++) { str += (char)(65 + 58 * uniform_r(rnd)); if (n < NS1 && i1 >= 2*NL && (i1 % NL) == 0) { int k = i1 - NL - NL / 2 - 1; string s = str.substr(k, NL); if (n % 2 > 0) // 存在しないデータの作成 s = s.replace(NL/2, 1, "("); data_st.push_back(s); n++; } } // 探索 NS1 = n; tm2 = clock(); n1 = 0; n2 = 0; for (int i1 = 0; i1 < NS1; i1++) { string::size_type p = str.find(data_st[i1]); if (0 <= p && p < str.size()-1) n1++; else n2++; } tm3 = clock(); printf("文字数(string): %d,探索データ(数 %d,文字数 %d)\n", N1, NS1, NL); printf(" data %d ms\n", (int)(tm2-tm1)); printf(" 探索 %d ms,成功 %d,失敗 %d\n", (int)(tm3-tm2), n1, n2); return 0; }
データ数(array): 1000000,探索データ数 100000 data 9 ms sort 67 ms 二分探索 20 ms,失敗 0 データ数(set): 1000000,探索データ数 100000 data 689 ms 探索 63 ms,失敗 0 データ数(unordered_map): 1000000,探索データ数 100000 data 414 ms 探索 6 ms,失敗 0 文字数(char): 1000201,探索データ(数 5000,文字数 200) data 467 ms 探索 2970 ms,成功 2500,失敗 2500 文字数(string): 1000201,探索データ(数 5000,文字数 200) data 47 ms 探索 3568 ms,成功 2500,失敗 2500
/****************************/ /* クイックソート */ /* coded by Y.Suganuma */ /****************************/ import java.io.*; import java.util.*; public class Test { public static void main(String args[]) { // 初期設定 int N = 1000000; int NS = 100000; Random rn = new Random(); // // 二分探索( array ) // // データ設定 int data[] = new int [N]; int data_s[] = new int [NS]; long tm1 = System.currentTimeMillis(); int m = 0; for (int i1 = 0; i1 < N; i1++) { int k = rn.nextInt(); data[i1] = k; if (i1%10 == 0) { data_s[m] = k; m++; } } // sort long tm2 = System.currentTimeMillis(); Arrays.sort(data); // 二分探索 long tm3 = System.currentTimeMillis(); int n = 0; for (int i1 = 0; i1 < NS; i1++) { int b = Arrays.binarySearch(data, data_s[i1]); if (b < 0) n++; } long tm4 = System.currentTimeMillis(); System.out.printf("データ数(array): %d,探索データ数 %d\n", N, NS); System.out.printf(" data %d ms\n", (tm2-tm1)); System.out.printf(" sort %d ms\n", (tm3-tm2)); System.out.printf(" 二分探索 %d ms,失敗 %d\n", (tm4-tm3), n); // // 探索木( TreeSet ) // // データ設定 TreeSets = new TreeSet (); tm1 = System.currentTimeMillis(); m = 0; for (int i1 = 0; i1 < N; i1++) { int k = rn.nextInt(); boolean b = s.add(new Integer(k)); if (b) { if (i1%10 == 0) { data_s[m] = k; m++; } } else i1--; } // 探索 tm2 = System.currentTimeMillis(); n = 0; for (int i1 = 0; i1 < NS; i1++) { if (!s.contains(data_s[i1])) n++; } tm3 = System.currentTimeMillis(); System.out.printf("データ数(TreeSet): %d,探索データ数 %d\n", N, NS); System.out.printf(" data %d ms\n", (tm2-tm1)); System.out.printf(" 探索 %d ms,失敗 %d\n", (tm3-tm2), n); // // ハッシュ( HashMap ) // // データ設定 HashMap um = new HashMap (); tm1 = System.currentTimeMillis(); m = 0; for (int i1 = 0; i1 < N; i1++) { int k = rn.nextInt(); double v = rn.nextDouble(); um.put(new Integer(k), new Double(v)); if (i1%10 == 0) { data_s[m] = k; m++; } } // 探索 tm2 = System.currentTimeMillis(); n = 0; for (int i1 = 0; i1 < NS; i1++) { if (!um.containsKey(data_s[i1])) n++; } tm3 = System.currentTimeMillis(); System.out.printf("データ数(HashMap): %d,探索データ数 %d\n", N, NS); System.out.printf(" data %d ms\n", (tm2-tm1)); System.out.printf(" 探索 %d ms,失敗 %d\n", (tm3-tm2), n); // // 文字列( String ) // int N1 = 1000201; int NS1 = 5000; int NL = 200; char data_st1[][] = new char [NS1][NL]; char str1[] = new char[N1]; // データ設定 tm1 = System.currentTimeMillis(); n = 0; for (int i1 = 0; i1 < N1; i1++) { str1[i1] = (char)(65 + 58 * rn.nextDouble()); if (n < NS1 && i1 >= 2*NL && (i1 % NL) == 0) { int k = i1 - NL - NL / 2 - 1; for (int i2 = 0; i2 < NL; i2++) { data_st1[n][i2] = str1[k]; k++; } if (n % 2 > 0) // 存在しないデータの作成 data_st1[n][NL/2] = '('; n++; } } String data_st[] = new String [NS1]; for (int i1 = 0; i1 < NS1; i1++) data_st[i1] = new String(data_st1[i1]); String str = new String(str1); // 探索 NS1 = n; tm2 = System.currentTimeMillis(); int n1 = 0; int n2 = 0; for (int i1 = 0; i1 < NS1; i1++) { int p = str.indexOf(data_st[i1]); if (p >= 0) n1++; else n2++; } tm3 = System.currentTimeMillis(); System.out.printf("文字数(String): %d,探索データ(数 %d,文字数 %d)\n", N1, NS1, NL); System.out.printf(" data %d ms\n", (int)(tm2-tm1)); System.out.printf(" 探索 %d ms,成功 %d,失敗 %d\n", (int)(tm3-tm2), n1, n2); } }
データ数(array): 1000000,探索データ数 100000 data 19 ms sort 90 ms 二分探索 24 ms,失敗 0 データ数(TreeSet): 1000000,探索データ数 100000 data 1297 ms 探索 92 ms,失敗 0 データ数(HashMap): 1000000,探索データ数 100000 data 1027 ms 探索 19 ms,失敗 0 文字数(String): 1000201,探索データ(数 5000,文字数 200) data 51 ms 探索 4476 ms,成功 2500,失敗 2500
<!DOCTYPE HTML> <HTML> <HEAD> <TITLE>ソートと探索</TITLE> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8"> <SCRIPT TYPE="text/javascript"> res = ""; // // main // function main() { // // 探索(配列) // let N = 500000; let NS = 50000; // データ設定 let data = new Array(); let data_s = new Array(); let now = new Date(); let tm1 = now.getTime(); let m = 0; for (let i1 = 0; i1 < N; i1++) { let k = Math.floor(2000000000 * Math.random()); data[i1] = k; if (i1%10 == 0) { data_s[m] = k; m++; } } // sort now = new Date(); let tm2 = now.getTime(); data.sort((a, b) => a - b); // 探索 now = new Date(); let tm3 = now.getTime(); let n1 = 0; for (let i1 = 0; i1 < data_s.length; i1++) { if (data.indexOf(data_s[i1]) < 0) n1++; } // 二分探索 now = new Date(); let tm4 = now.getTime(); let n2 = 0; for (let i1 = 0; i1 < data_s.length; i1++) { if (b_search(data_s[i1], data, N) < 0) n2++; } now = new Date(); let tm5 = now.getTime(); res = res + "データ数(array): " + data.length + ",探索データ数 " + data_s.length + "\n"; res = res + " data " + (tm2-tm1) + " ms\n"; res = res + " sort " + (tm3-tm2) + " ms\n"; res = res + " 探索 " + (tm4-tm3) + " ms,失敗 " + n1 + "\n"; res = res + " 二分探索 " + (tm5-tm4) + " ms,失敗 " + n2 + "\n"; // // 文字列( string ) // // データ設定 let N1 = 500201; let NS1 = 5000; let NL = 100; let data_st = new Array(); str = ""; m = 0; now = new Date(); tm1 = now.getTime(); for (let i1 = 0; i1 < N1; i1++) { str += String.fromCharCode(Math.floor(65 + 58 * Math.random())); if (m < NS1 && i1 >= 2*NL && (i1 % NL) == 0) { let k = i1 - NL - NL / 2 - 1; let s = str.substr(k, NL); if (m % 2 > 0) // 存在しないデータの作成 s = s.substr(k, NL/2) + "(" + s.substr(NL/2+1, NL/2-1); data_st[m] = s; m++; } } // 探索 now = new Date(); tm2 = now.getTime(); n1 = 0; n2 = 0; for (let i1 = 0; i1 < NS1; i1++) { if (str.indexOf(data_st[i1]) < 0) n2++; else n1++; } now = new Date(); tm3 = now.getTime(); res = res + "文字数(string): " + str.length + ",探索データ(数 " + data_st.length + ",文字数 " + data_st[0].length + ")\n"; res += " data " + (tm2-tm1) + " ms\n"; res = res + " 探索 " + (tm3-tm2) + " ms,成功 " + n1 + ",失敗 " + n2 + "\n"; document.getElementById("result").value = res; } // // 二分探索 // function b_search(key, data, n) { let sw = -1; let left = 0; let right = n - 1; if (data[right] > data[left]) { while (left < right) { let center = Math.floor((left + right) / 2); if (data[center] < key) left = (center < n-1) ? center + 1 : center; else right = center; } } else { while (left < right) { let center = Math.floor((left + right) / 2); if (data[center] > key) left = (center < n-1) ? center + 1 : center; else right = center; } } if (data[left] == key) sw = left; return sw; } </SCRIPT> </HEAD> <BODY STYLE="font-size: 130%; text-align:center; background-color: #eeffee;"> <H2><B>ソートと探索</B></H2> <BUTTON STYLE="font-size: 100%; background-color: pink" onClick="return main()">実行</BUTTON><BR> <P> <DIV STYLE="text-align:center">実行結果</DIV> <TEXTAREA ID="result" COLS="70" ROWS="10" STYLE="font-size: 100%;"></TEXTAREA> </BODY> </HTML>
データ数(array): 500000,探索データ数 50000 data 44 ms sort 523 ms 探索 20356 ms,失敗 0 二分探索 31 ms,失敗 0 文字数(string): 500201,探索データ(数 5000,文字数 100) data 1230 ms 探索 177 ms,成功 2500,失敗 2500
/****************************/ /* ソートと探索 */ /* coded by Y.Suganuma */ /****************************/ <?php // // 二分探索 // function b_search($key, $data, $n) { $sw = -1; $left = 0; $right = $n - 1; if ($data[$right] > $data[$left]) { while ($left < $right) { $center = floor(($left + $right) / 2); if ($data[$center] < $key) $left = ($center < $n-1) ? $center + 1 : $center; else $right = $center; } } else { while ($left < $right) { $center = floor(($left + $right) / 2); if ($data[$center] > $key) $left = ($center < $n-1) ? $center + 1 : $center; else $right = $center; } } if ($data[$left] == $key) $sw = $left; return $sw; } // 初期設定 mt_srand(); // // 探索(配列) // // データ設定 $N = 1000000; $NS = 100000; $data = array(); $data_s = array(); $tm1 = microtime(); $ms = strtok($tm1, " "); $sec = strtok(" "); $tm1 = (intval($sec) % 1000) * 1000 + intval(floatval($ms) * 1000); $m = 0; for ($i1 = 0; $i1 < $N; $i1++) { $k = mt_rand(0, 2000000000); $data[$i1] = $k; if ($i1%10 == 0) { $data_s[$m] = $k; $m++; } } // sort $tm2 = microtime(); $ms = strtok($tm2, " "); $sec = strtok(" "); $tm2 = (intval($sec) % 1000) * 1000 + intval(floatval($ms) * 1000); sort($data); // 探索 $tm3 = microtime(); $ms = strtok($tm3, " "); $sec = strtok(" "); $tm3 = (intval($sec) % 1000) * 1000 + intval(floatval($ms) * 1000); $n = 0; for ($i1 = 0; $i1 < $NS; $i1++) { if (!in_array($data_s[$i1], $data)) $n++; } // 二分探索 $tm4 = microtime(); $ms = strtok($tm4, " "); $sec = strtok(" "); $tm4 = (intval($sec) % 1000) * 1000 + intval(floatval($ms) * 1000); $n = 0; for ($i1 = 0; $i1 < $NS; $i1++) { if (b_search($data_s[$i1], $data, $N) < 0) $n++; } $tm5 = microtime(); $ms = strtok($tm5, " "); $sec = strtok(" "); $tm5 = (intval($sec) % 1000) * 1000 + intval(floatval($ms) * 1000); printf("データ数(array): %d,探索データ数 %d\n", $N, $NS); printf(" data %d ms\n", $tm2-$tm1); printf(" sort %d ms\n", $tm3-$tm2); printf(" 探索 %d ms,失敗 %d\n", ($tm4-$tm3), $n); printf(" 二分探索 %d ms,失敗 %d\n", ($tm5-$tm4), $n); // // 文字列( string ) // $N1 = 1000201; $NS1 = 5000; $NL = 200; // データ設定 $data_st = array(); $str = ""; $n = 0; $tm1 = microtime(); $ms = strtok($tm1, " "); $sec = strtok(" "); $tm1 = (intval($sec) % 1000) * 1000 + intval(floatval($ms) * 1000); for ($i1 = 0; $i1 < $N1; $i1++) { $str = $str.chr(mt_rand(65, 123)); if ($n < $NS1 && $i1 >= 2*$NL && ($i1 % $NL) == 0) { $k = $i1 - $NL - $NL / 2 - 1; $s = substr($str, $k, $NL); if ($n % 2 > 0) { // 存在しないデータの作成 $s1 = substr($s, $k, $NL/2); $s1 = $s1."("; $s1 = $s1.substr($s, $NL/2+1, $NL-$NL/2-1); $s = $s1; } $data_st[$n] = $s; $n++; } } // 探索 $tm2 = microtime(); $ms = strtok($tm2, " "); $sec = strtok(" "); $tm2 = (intval($sec) % 1000) * 1000 + intval(floatval($ms) * 1000); $NS1 = $n; $n1 = 0; $n2 = 0; for ($i1 = 0; $i1 < $NS1; $i1++) { if (strstr($str, $data_st[$i1]) == FALSE) $n2++; else $n1++; } $tm3 = microtime(); $ms = strtok($tm3, " "); $sec = strtok(" "); $tm3 = (intval($sec) % 1000) * 1000 + intval(floatval($ms) * 1000); printf("文字数(string): %d,探索データ(数 %d,文字数 %d)\n", $N1, $NS1, $NL); printf(" data %d ms\n", ($tm2-$tm1)); printf(" 探索 %d ms,成功 %d,失敗 %d\n", ($tm3-$tm2), $n1, $n2); ?>
データ数(array): 1000000,探索データ数 100000 data 186 ms sort 336 ms 探索 103832 ms,失敗 0 二分探索 397 ms,失敗 0 文字数(string): 1000201,探索データ(数 5000,文字数 200) data 28210 ms 探索 462 ms,成功 2500,失敗 2500
#****************************/ #* ソートと探索 */ #* coded by Y.Suganuma */ #****************************/ # 初期設定 srand() # # 二分探索( vector ) # # データ設定 nn = 1000000 ns = 100000 data = Array.new() data_s = Array.new() tm1 = Process.times for i1 in (0...nn) k = rand(2000000000) data.push(k) if i1%10 == 0 data_s.push(k) end end # sort tm2 = Process.times data = data.sort # 二分探索 tm3 = Process.times n = 0 for x in data_s b = data.bsearch { |v| v >= x } if b == nil n += 1 end end tm4 = Process.times printf "データ数(array): %d,探索データ数 %d\n", nn, ns printf " data %d ms\n", Integer(1000*(tm2[0] - tm1[0] + tm2[1] - tm1[1])) printf " sort %d ms\n", Integer(1000*(tm3[0] - tm2[0] + tm3[1] - tm2[1])) printf " 二分探索 %d ms,失敗 %d\n", Integer(1000*(tm4[0] - tm3[0] + tm4[1] - tm3[1])), n # # ハッシュ( Hash クラス ) # # データ設定 nn = 50000 ns = 5000 key = Array.new() val = Array.new() m = 0; tm1 = Process.times for i1 in (0...nn) k = rand(2000000000) key.push(k) v = rand() val.push(k) if i1%10 == 0 data_s[m] = k m += 1 end end x = key.zip(val) ha = Hash[*x.flatten] # 探索 tm2 = Process.times n = 0; for i1 in (0...ns) p = ha.fetch(data_s[i1], -1) if (p < 0) n += 1; end end tm3 = Process.times printf "データ数(Hash クラス): %d,探索データ数 %d\n", nn, ns printf " data %d ms\n", Integer(1000*(tm2[0] - tm1[0] + tm2[1] - tm1[1])) printf " 探索 %d ms,失敗 %d\n", Integer(1000*(tm3[0] - tm2[0] + tm3[1] - tm2[1])), n # # 文字列( string ) # nn = 1000201 ns = 5000 nl = 200 # データ設定 data_st = Array.new tm1 = Process.times n = 0 str = "" for i1 in (0...nn) str.concat(Integer(65 + 58 * rand())) if (n < ns && i1 >= 2*nl && i1 % nl == 0) k = i1 - nl - nl / 2 - 1 s = str.slice(k, nl) if (n % 2 > 0) # 存在しないデータの作成 k = nl / 2 s[k..k] = "(" end data_st.push(s) n += 1 end end # 探索 tm2 = Process.times ns = n n1 = 0 n2 = 0 for i1 in (0...ns) p = str.index(data_st[i1]); if (p == nil) n2 += 1 else n1 += 1 end end tm3 = Process.times printf "文字数(String): %d,探索データ(数 %d,文字数 %d)\n", nn, ns, nl printf " data %d ms\n", Integer(1000*(tm2[0] - tm1[0] + tm2[1] - tm1[1])) printf " 探索 %d ms,成功 %d,失敗 %d\n", Integer(1000*(tm3[0] - tm2[0] + tm3[1] - tm2[1])), n1, n2
データ数(array): 1000000,探索データ数 100000 data 610 ms sort 1031 ms 二分探索 266 ms,失敗 0 データ数(Hash クラス): 50000,探索データ数 5000 data 170 ms 探索 0 ms,失敗 0 文字数(String): 1000201,探索データ(数 5000,文字数 200) data 516 ms 探索 453 ms,成功 2500,失敗 2500
#****************************/ #* ソートと探索 */ #* coded by Y.Suganuma */ #****************************/ # -*- coding: UTF-8 -*- import sys import time import bisect from random import * # 初期設定 seed() # # 二分探索( vector ) # # データ設定 N = 1000000 NS = 100000 data = list() data_s = list() tm1 = time.perf_counter() m = 0; for i1 in range(0, N) : k = randint(0, 2000000000) data.append(k) if i1%10 == 0 : data_s.append(k) # sort tm2 = time.perf_counter() data.sort(); # 二分探索支援 tm3 = time.perf_counter() for i1 in range(0, NS) : bisect.bisect(data, data_s[i1]) tm4 = time.perf_counter() print("データ数(list):", N, "探索データ数", NS) print(" data", int((tm2 - tm1) * 1000), "ms") print(" sort ", int((tm3 - tm2) * 1000), "ms") print(" 二分探索 ", int((tm4 - tm3) * 1000), "ms") # # ハッシュ( unordered_map ) # # データ設定 um = dict() tm1 = time.perf_counter() data_s.clear() for i1 in range(0, N) : k = randint(0, 2000000000) v = random() um[k] = v if i1%10 == 0 : data_s.append(k) # 探索 tm2 = time.perf_counter() n = 0; for i1 in range(0, NS) : if um.get(data_s[i1], -1) < 0 : n += 1 tm3 = time.perf_counter() print("データ数(dict): ", N, ",探索データ数 ", NS) print(" data", int((tm2 - tm1) * 1000), "ms") print(" 探索 ", int((tm3 - tm2) * 1000), "ms", "失敗", n) # # 文字列( string ) # N1 = 1000201 NS1 = 5000 NL = 200 # データ設定 data_st = list() st = "" n = 0 tm1 = time.perf_counter() for i1 in range(0, N1) : st += chr(int(65 + 58 * random())) if n < NS1 and i1 >= 2*NL and i1 % NL == 0 : k = int(i1 - NL - NL / 2 - 1) s = st[k : NL] if n % 2 > 0 : # 存在しないデータの作成 k = int(NL / 2) k1 = k + 1 s1 = s[0 : k] s1 += "(" s = s1 + s[k1 : NL] data_st.append(s) n += 1 # 探索 tm2 = time.perf_counter() n1 = 0 n2 = 0 for i1 in range(0, NS1) : if st.find(data_st[i1]) < 0 : n2 += 1 else : n1 += 1 tm3 = time.perf_counter() print("文字数(string): ", N1, ",探索データ(数 ", NS1, ",文字数 ", NL, ")") print(" data", int((tm2 - tm1) * 1000), "ms") print(" 探索", int((tm3 - tm2) * 1000), "ms,成功 ", n1, ",失敗 ", n2)
データ数(list): 1000000 探索データ数 100000 data 2705 ms sort 722 ms 二分探索 200 ms データ数(dict): 1000000 ,探索データ数 100000 data 2938 ms 探索 55 ms 失敗 0 文字数(string): 1000201 ,探索データ(数 5000 ,文字数 200 ) data 1428 ms 探索 620 ms,成功 2500 ,失敗 2500
情報学部 | 菅沼ホーム | 目次 | 索引 |