-2

質問1)

私はc++でdoubleの大きなスパースベクトルを持っています、私はベクトルから非ゼロ要素のインデックスを効率的に解析する必要があります。私は明らかに長さをループしてそれを行うことができます、それを行うためのより良い方法はありますか?

4

3 に答える 3

3

ダブルスのベクトルの構成に関する特別な知識がない限り(たとえば、ソートされている場合)、全体をループするのが最も効率的です。

もちろん、エラディダンによって提案された構造の変化は、おそらくあなたが考慮すべきものです。

于 2013-02-17T17:56:04.737 に答える
3

私はc++でdoubleの大きなスパースベクトルを持っています、私はベクトルから非ゼロ要素のインデックスを効率的に解析する必要があります。私は明らかに長さをループしてそれを行うことができます、それを行うためのより良い方法はありますか?

ベクトルが本当にスパースである場合(n = o(N)ここnで、は非ゼロ要素の数であり、はベクトルのサイズです)、またはNで表すのがおそらく最適です。方法であなたはで要素を見つけることができます。検索操作を使用すると、の償却時間がかかります。どちらの場合も、ゼロ以外の要素の数は単にコンテナのサイズです。どちらのアプローチも、の代わりにスペースを取ります。std::map<int,double>std::unordered_map<int,double>std::mapO(log(n))std::unordered_mapO(1)O(n)O(N)

于 2013-02-17T17:56:31.023 に答える