以下の関数の複雑さを理解しようとしています。Random クラスは O(1) と put() で乱数を生成し、O(1) でもあるため、O(n) になると思いますcontainsKey()
。
しかしdo-while
、ループ内に a があるため、値が HashMap に含まれていると random() が複数回呼び出される可能性があるため、複雑さが変わるかどうかはわかりませんでした。助けていただければ幸いです!
HashMap<Integer, Integer> values = new HashMap();
for(int i=0 ; i<a.length; i++){
do{
// set variable random to some integer between 0 and a.length using Random class in Java, 0 is included.
}while(values.containsKey(random) == true);
b[i] = a[random]
values.put(random,0);
}
配列の長さは約 1000 で、生成される乱数は 0 から 999 の範囲です。