ビームサーチでは候補となるノードを評価してその上位 N件を取得する処理が必要になるのですが、この部分をどう実装するのが高速なのかが度々話題になったりならなかったりします。 候補としては以下の 4つになります。(C++) sort nth_element partial_sort priority_queue 気になったので簡易的なコードを書いて実験してみました。(10万回ランダムに値を生成して、その中の値の小さい方から 100件を取得する。それを 1000回繰り返すコード) sort ver #include <algorithm> #include <iostream> #include <chrono> #include <vector> using namespace std; using namespace std::chrono; typedef long long ll; in
![ビームサーチの上位 N件を高速に取る手法について考えてみる](https://cdn-ak-scissors.b.st-hatena.com/image/square/7658234cff64a85a78f54d398a3aecd52a0ee4e7/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--gJSuIC9Q--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3A%2525E3%252583%252593%2525E3%252583%2525BC%2525E3%252583%2525A0%2525E3%252582%2525B5%2525E3%252583%2525BC%2525E3%252583%252581%2525E3%252581%2525AE%2525E4%2525B8%25258A%2525E4%2525BD%25258D%252520N%2525E4%2525BB%2525B6%2525E3%252582%252592%2525E9%2525AB%252598%2525E9%252580%25259F%2525E3%252581%2525AB%2525E5%25258F%252596%2525E3%252582%25258B%2525E6%252589%25258B%2525E6%2525B3%252595%2525E3%252581%2525AB%2525E3%252581%2525A4%2525E3%252581%252584%2525E3%252581%2525A6%2525E8%252580%252583%2525E3%252581%252588%2525E3%252581%2525A6%2525E3%252581%2525BF%2525E3%252582%25258B%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Cl_text%3Anotosansjp-medium.otf_37%3Asiman%252Cx_203%252Cy_121%2Fg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9saDMuZ29vZ2xldXNlcmNvbnRlbnQuY29tL2EtL0FPaDE0R2p2VjFZLVh1NHV4SEhsbWtfNFBEeXBGUWxkNnBTcFFKMFNVTUhSPXMyNTAtYw%3D%3D%252Cr_max%252Cw_90%252Cx_87%252Cy_95%2Fv1627283836%2Fdefault%2Fog-base-w1200-v2.png)