質問1)
私はc++でdoubleの大きなスパースベクトルを持っています、私はベクトルから非ゼロ要素のインデックスを効率的に解析する必要があります。私は明らかに長さをループしてそれを行うことができます、それを行うためのより良い方法はありますか?
質問1)
私はc++でdoubleの大きなスパースベクトルを持っています、私はベクトルから非ゼロ要素のインデックスを効率的に解析する必要があります。私は明らかに長さをループしてそれを行うことができます、それを行うためのより良い方法はありますか?
ダブルスのベクトルの構成に関する特別な知識がない限り(たとえば、ソートされている場合)、全体をループするのが最も効率的です。
もちろん、エラディダンによって提案された構造の変化は、おそらくあなたが考慮すべきものです。
私はc++でdoubleの大きなスパースベクトルを持っています、私はベクトルから非ゼロ要素のインデックスを効率的に解析する必要があります。私は明らかに長さをループしてそれを行うことができます、それを行うためのより良い方法はありますか?
ベクトルが本当にスパースである場合(n = o(N)
ここn
で、は非ゼロ要素の数であり、はベクトルのサイズです)、またはN
で表すのがおそらく最適です。方法であなたはで要素を見つけることができます。検索操作を使用すると、の償却時間がかかります。どちらの場合も、ゼロ以外の要素の数は単にコンテナのサイズです。どちらのアプローチも、の代わりにスペースを取ります。std::map<int,double>
std::unordered_map<int,double>
std::map
O(log(n))
std::unordered_map
O(1)
O(n)
O(N)