Skip to content

Tags: acharron/practice_algorithm_data_struct

Tags

nqueen-0.5

Toggle nqueen-0.5's commit message
Add : n-queen : conflict中のクイーンを探す処理の改善、合計 -20秒を減らした

nqueen-0.4

Toggle nqueen-0.4's commit message
n-queen : Add : start_pos に good-enough min-conflict 仕様に変更

init_start_pos_v0_2() では各行に全てのセルを確認してからどのセルが min-conflict
なのかを判断していました。
しかし、全てのセルをチェックするのはもったいない、 O(n^2) になる

今回 v0.4 では、初期ポジションを作る処理は、1行に対して全てのセルを確認しなくて、
上限 T 個のセルだけを確認する。このような流れ :

* 1. ランダムで1つのセルを選ぶ
* 2. そのセルのconflict数を計算
* 3a. conflictが 0 なら、そのセルにクイーンを置く。終了
* 3b. conflictが 1 以上なら、ステップ1に戻る、別のセルを選択する
* 4. もし T 回もトライしたけど conflict = 0 のセルを見つからなかった場合、
     今まで判断した T個のセルの中で「今まで見た中で一番マシなセル」にする。終了
     "good-enough" セルを選んだ

そうすると、1行に当てる最悪の時間は T 回 (固定値) だけ
最悪の場合、 preprocess の処理が O(nT) = O(n) になりました。

T の固定値を調整することで、preprocessの処理時間と初期ポジションの良さのバランスできる

nqueen-0.3

Toggle nqueen-0.3's commit message
n-queen : Add : conflict 計算の仕様を改善 : バッファーで貯めていく

n = 10 000 までは行ける!処理時間は 25~35s

* 「あるセルのconflict数」は毎回計算するのではなくて、クイーンを動かす時に保存
* それでも、やはりまだ O(n^2) なので、まだまだ

TODO
* 「ある行にはどこが min-conflict ?」の計算仕様を改善?
* 全く別のデータ構造で O(n^2) をなくす

nqueen-0.2

Toggle nqueen-0.2's commit message
n-queen : Add : v0.2 Good start position (preprocess) + optimizations

* start_pos (preprocess 処理) をランダムではない方法に実装
* いくつかの処理改善 (無駄な計算を無くしたり。。。)
* timelog に IS_QUIET を追加

TODO
* Bottleneck : fetch_col_with_min_conflict_in_row()
  それぞれの行にどこが min-conflict の col を探すのは時間かかる

nqueen-0.1

Toggle nqueen-0.1's commit message
n-queen : Add : timelog + v0.1