web-dev-qa-db-ja.com

Parallel.ForEachの時間の複雑さ

説明する疑似コードとコメント:

_// first select companies to process from db

foreach (company) {
    // select the employees
    foreach (employee of company) {
        // select items they can access
        foreach (item) {
           // do some calculation and save
_

これはO(n ^ 3)時間の複雑さになると思います。間違っている場合は修正してください-Big Oはいつも頭痛の種になっています。私の質問は、最初のレベルで並列処理を導入するとどうなるのでしょうか。 2番目の反復のために2番目のparallel.foreach()も導入するとどうなりますか?

編集: O(...)とはどのように計算しますか? が私の質問に対処することが提案されましたが、_Parallel.Foreach_は時間の複雑さに影響を与えるので、問題はそれだけで十分に異なると思います。

12
Jesse Q

上記の回答への小さな追加として、O-Notationは依然として並列アルゴリズム分析で時々使用されます。

たとえば、次を参照してください https://en.wikipedia.org/wiki/Analysis_of_parallel_algorithms

文学でそのようなことを偶然見つけたときの意味を知っているだけです。

その意味で、時間の複雑さはO(nmk/p)であると言えるでしょう。ここで、pはプロセッサーの数です。ただし、これは未知の増加するプロセッサ数を想定しているため、実際のマシンには適用されません。 (しかし、誰もが知っているように、すべてのアルゴリズムは常にO(1)実マシンではです。;-))

2
fortuneNext