並べ替え:このパフォーマンスの違いは実際のものですか、それとも何か問題がありますか?

user81993

8つのフロートで構成される小さな配列をたくさん並べ替える必要がありました。もともと私はstd :: sortを使用していましたが、そのパフォーマンスに不満があり、これによって生成されたコンペアスワップアルゴリズムを試しました:http//pages.ripco.net/~jgamble/nw.html

テストコードは次のとおりです。

template <typename T>
bool PredDefault(const T &a, const T &b) {return a > b;}

template <typename T>
bool PredDefaultReverse(const T &a, const T &b) {return a < b;}

template <typename T>
void Sort8(T* Data, bool(*pred)(const T &a, const T &b) = PredDefault) {
    #define Cmp_Swap(a, b) if (pred(Data[a], Data[b])) {T tmp = Data[a]; Data[a] = Data[b]; Data[b] = tmp;}

    Cmp_Swap(0, 1); Cmp_Swap(2, 3); Cmp_Swap(4, 5); Cmp_Swap(6, 7);
    Cmp_Swap(0, 2); Cmp_Swap(1, 3); Cmp_Swap(4, 6); Cmp_Swap(5, 7);
    Cmp_Swap(1, 2); Cmp_Swap(5, 6); Cmp_Swap(0, 4); Cmp_Swap(3, 7); 
    Cmp_Swap(1, 5); Cmp_Swap(2, 6);  
    Cmp_Swap(1, 4); Cmp_Swap(3, 6);
    Cmp_Swap(2, 4); Cmp_Swap(3, 5);
    Cmp_Swap(3, 4);

}

int lastTick;
int tick() {
    int hold = lastTick;
    lastTick = GetTickCount();
    return lastTick - hold;
}

int main()
{
    vector<vector<float>> rVec(1000, vector<float>(8)); 
    for (auto &v : rVec) {
        v[0] = ((float)rand()) * 0.001;
        v[1] = ((float)rand()) * 0.001;
        v[2] = ((float)rand()) * 0.001;
        v[3] = ((float)rand()) * 0.001;
        v[4] = ((float)rand()) * 0.001;
        v[5] = ((float)rand()) * 0.001;
        v[6] = ((float)rand()) * 0.001;
        v[7] = ((float)rand()) * 0.001;
    }

    system("PAUSE");
    tick();

    for (int n = 0; n < 50000; n++)
    for (int j = 0; j < rVec.size(); j++) {
        std::sort(rVec[j].begin(), rVec[j].end(), PredDefault<float>);
        std::sort(rVec[j].begin(), rVec[j].end(), PredDefaultReverse<float>);
        //Sort8(rVec[j].data(), PredDefault<float>);
        //Sort8(rVec[j].data(), PredDefaultReverse<float>);
    }

    cout << "\nTime: " << tick() << "\n";
    system("PAUSE");

    return 1;
}

どちらかをテストするときにコメントマークを追加/削除します。

私はあまり期待していませんでしたが、違いはスワッピングソートのものを支持して10倍です(vs2012のリリース構成でエネルギー節約のものをオフにしてテストを行いました)。結果もチェックしてください。これは正しいですか?

点火

私がすぐに考えることができるいくつかの理由があります。

  1. 比較がハードコーディングされています。これは、複数の命令をパイプライン化するのに役立ち、非常に効率的になります。しかし、N = 1000でコーディングすることを想像してみてください。1000 * 1000の比較を書く必要があります。
  2. std::sortないO(nlogn)比較を。ただし、表記の定数が大きくなる可能性があるため、このBigO表記は大きなNにも当てはまります。したがって、8つの値の範囲で実行して効率を判断することはできません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

私はこの問題を並べ替えて、それは参照エスケープによるものでありますか?

分類Dev

Pythonの引数とkwargs-それは好みの問題ですか、それとも実際の動作の違いはありますか?

分類Dev

これは、Jackson JsonParserのバグですか、それとも何か問題がありますか?

分類Dev

Win 10-ある方法で親フォルダーを並べ替えて表示する方法と、何百ものサブフォルダーが親フォルダーとは異なる方法で並べ替えられていますか?

分類Dev

これらの2つのコードは同じものを表していますか?パフォーマンスの違いはありますか?

分類Dev

それはMSVC2010のバグですか、それとも何か問題がありますか?

分類Dev

マングースの並べ替えがネイティブのJavaScriptの並べ替えよりも遅いのはなぜですか?

分類Dev

std :: functionにはパフォーマンスの問題がありますが、それを回避するにはどうすればよいですか?

分類Dev

私は何かが足りないのですか、それとも仮想通話は人々が作るほど悪いパフォーマンスではありませんか

分類Dev

パフォーマンスの問題は別として、Groovy / JRubyなどよりもJavaが選ばれているのはなぜですか?

分類Dev

最新のPHPのAESGCMが壊れていますか、それとも何か問題がありますか?

分類Dev

matplotlib axvlineの真実があいまいですか、それともリストの問題ですか?

分類Dev

PHPの上または下のどこにHTMLフォームを配置するか、それとも問題ではありませんか?

分類Dev

値の割り当てはパフォーマンスを向上または低下させますか、それとも何もしませんか?

分類Dev

どちらがパフォーマンスに優れていますか:ページごとに1つのコントローラーですか、それとも1つのコントローラーに多数のページがありますか?

分類Dev

パフォーマンスにとって何が良いですか?1つのディレクトリに多くのファイルがありますか、それともそれぞれが1つのファイルを持つ多くのサブディレクトリですか?

分類Dev

パフォーマンスにとって何が良いですか?1つのディレクトリに多くのファイルがありますか、それともそれぞれが1つのファイルを持つ多くのサブディレクトリですか?

分類Dev

jQueryで動的CSSを追加する際にパフォーマンスの問題はありますか?

分類Dev

「メモリリーク」とは何ですか?パフォーマンスの問題ですか、それともセキュリティの問題ですか?

分類Dev

l、ls、la-違いは何ですか?これらのコマンドは他にもありますか?

分類Dev

Schema.orgには実際のデータがありますか、それともスキーマを提供するだけですか?

分類Dev

ノートパソコンのキーボードが壊れていませんか、それとも問題は他にありますか?

分類Dev

ウィジェットを切り替えるときに定数変数のパフォーマンスが向上しますか?その場合、アプリのエントリポイントでこれをどのように実現しますか?

分類Dev

タスクが開始されることもあれば、開始されないこともありますが、その理由は何ですか?

分類Dev

フォルダーのファイルエクスプローラーには何もありませんが、[プロパティ]ウィンドウに16GBあることが表示されます。そのスペースを何が占めているのかわからない

分類Dev

INTとVARCHARの主キーの間に実際のパフォーマンスの違いはありますか?

分類Dev

INTとVARCHARの主キーの間に実際のパフォーマンスの違いはありますか?

分類Dev

このコードに何か問題がありますか?それとも私のコンピューター?

分類Dev

誰もがC ++とJavaのパフォーマンスの違いを定量化できますか?

Related 関連記事

  1. 1

    私はこの問題を並べ替えて、それは参照エスケープによるものでありますか?

  2. 2

    Pythonの引数とkwargs-それは好みの問題ですか、それとも実際の動作の違いはありますか?

  3. 3

    これは、Jackson JsonParserのバグですか、それとも何か問題がありますか?

  4. 4

    Win 10-ある方法で親フォルダーを並べ替えて表示する方法と、何百ものサブフォルダーが親フォルダーとは異なる方法で並べ替えられていますか?

  5. 5

    これらの2つのコードは同じものを表していますか?パフォーマンスの違いはありますか?

  6. 6

    それはMSVC2010のバグですか、それとも何か問題がありますか?

  7. 7

    マングースの並べ替えがネイティブのJavaScriptの並べ替えよりも遅いのはなぜですか?

  8. 8

    std :: functionにはパフォーマンスの問題がありますが、それを回避するにはどうすればよいですか?

  9. 9

    私は何かが足りないのですか、それとも仮想通話は人々が作るほど悪いパフォーマンスではありませんか

  10. 10

    パフォーマンスの問題は別として、Groovy / JRubyなどよりもJavaが選ばれているのはなぜですか?

  11. 11

    最新のPHPのAESGCMが壊れていますか、それとも何か問題がありますか?

  12. 12

    matplotlib axvlineの真実があいまいですか、それともリストの問題ですか?

  13. 13

    PHPの上または下のどこにHTMLフォームを配置するか、それとも問題ではありませんか?

  14. 14

    値の割り当てはパフォーマンスを向上または低下させますか、それとも何もしませんか?

  15. 15

    どちらがパフォーマンスに優れていますか:ページごとに1つのコントローラーですか、それとも1つのコントローラーに多数のページがありますか?

  16. 16

    パフォーマンスにとって何が良いですか?1つのディレクトリに多くのファイルがありますか、それともそれぞれが1つのファイルを持つ多くのサブディレクトリですか?

  17. 17

    パフォーマンスにとって何が良いですか?1つのディレクトリに多くのファイルがありますか、それともそれぞれが1つのファイルを持つ多くのサブディレクトリですか?

  18. 18

    jQueryで動的CSSを追加する際にパフォーマンスの問題はありますか?

  19. 19

    「メモリリーク」とは何ですか?パフォーマンスの問題ですか、それともセキュリティの問題ですか?

  20. 20

    l、ls、la-違いは何ですか?これらのコマンドは他にもありますか?

  21. 21

    Schema.orgには実際のデータがありますか、それともスキーマを提供するだけですか?

  22. 22

    ノートパソコンのキーボードが壊れていませんか、それとも問題は他にありますか?

  23. 23

    ウィジェットを切り替えるときに定数変数のパフォーマンスが向上しますか?その場合、アプリのエントリポイントでこれをどのように実現しますか?

  24. 24

    タスクが開始されることもあれば、開始されないこともありますが、その理由は何ですか?

  25. 25

    フォルダーのファイルエクスプローラーには何もありませんが、[プロパティ]ウィンドウに16GBあることが表示されます。そのスペースを何が占めているのかわからない

  26. 26

    INTとVARCHARの主キーの間に実際のパフォーマンスの違いはありますか?

  27. 27

    INTとVARCHARの主キーの間に実際のパフォーマンスの違いはありますか?

  28. 28

    このコードに何か問題がありますか?それとも私のコンピューター?

  29. 29

    誰もがC ++とJavaのパフォーマンスの違いを定量化できますか?

ホットタグ

アーカイブ