各要素が別の要素を指す大規模な配列内の要素のサブセットをループする必要があります (大規模なグラフでの接続コンポーネントの検出に起因する問題)。
私のアルゴは次のようになります: 1. 最初の要素を検討します。3. 新しい要素が発見されなくなるまでループする 4. 1-3 でまだ考慮されていない次の要素を考慮し、1 に戻る。考慮する要素の数は、要素の総数よりもはるかに少ないことに注意してください。
私が今見ているものについては、次のいずれかを実行できます。
//create a map of all element, init all values to 0, set to 1 when consider
map<int,int> is_set; // is_set.size() will be equal to N
また
//create a (too) large array (total size), init to 0 the elements to consider
int* is_set = (int*)malloc(total_size * sizeof(int)); // is_set length will be total_size>>N
マップ内のキーへのアクセスは O(log N) であり、配列に対してのみ定数であることは知っていますが、作成時に malloc がより多くのメモリを必要とする一方でコストがかからないかどうかはわかりませんか?