アルゴリズムの複雑さを理解する

ジョン・ドウ

インタビューをコーディングするためのオンラインアルゴリズムソリューションをいくつか調べていますが、このアルゴリズムがO(n ^ 3)であると主張されている理由がわかりません。

警告:big-Oh表記は業界で悪用されていることを理解しています。O(n)を参照するときは、ほとんどの場所で学界以外で一般的であるように、アルゴリズムランタイムの上限を意味するためにその表記を使用しています。

最長の回文部分文字列を見つける。簡単な解決策は次のとおりです。

bool isPalindrome(std::string s) {
  if (s.length() <= 1) {
    return true;
  }

  if (s[0] == s[s.length() - 1]) {
    return isPalindrome(s.substr(1, s.length() - 2));
  } else {
    return false;
  }
}

std::string longestPalindrome(std::string s) {
  std::string max_pal = "";
  for (size_t i = 0; i < s.length(); ++i) {
    for (size_t len = 1; len <= s.length() - i; ++len) {
      std::string sub = s.substr(i,len);
      if (isPalindrome(sub)) {
        if (max_pal.size() < sub.size()) max_pal = sub;
      }
    }
  }
  return max_pal;
}

このアルゴリズムはO(n ^ 2)ではありませんか?非常に簡単に言えば、すべての部分文字列を生成するのにO(n ^ 2)時間かかり、それが回文であるかどうかを判断するのにO(n)時間かかります。ここで、nは最初の文字列の文字数です。

このアルゴリズムはO(n ^ 2)ではありませんか?非常に簡単に言えば、すべての部分文字列を生成するのにO(n ^ 2)時間かかり、それが回文であるかどうかを判断するのにO(n)時間かかります。

あなたが説明しているのは正確ですO(n^3)。なぜなら、各部分文字列に対して、コストのかかる操作を実行しているため、操作のO(n)総数はO(n^2 * C*n)、です。O(n^3)


ただし、説明されているコードは実際O(n^4)isPalindrome()O(n^2)次のとおりです

  • O(n)サイズが:の部分文字列を作成しています。1 + 3 + 5 + ... + n-2これはO(n^2)合計時間です。
  • 合計でこのO(n^2)回数を実行longestPalindrome()O(n^4)ます。

(これはO(n) substr()複雑さを前提としています。定義されていませんが、通常はそうです

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

中央値アルゴリズムの中央値の複雑さを理解する方法は?

分類Dev

アルゴリズムの複雑さを数える-BigO

分類Dev

次のアルゴリズムの次数の複雑さを計算する方法

分類Dev

BigOの複雑さを改善するためのアルゴリズム

分類Dev

HashMap検索アルゴリズムの複雑さを計算する方法は?

分類Dev

オブジェクトをハッシュとして使用するJavaScriptアルゴリズムの複雑さを理解する

分類Dev

複雑さが指定された再帰的アルゴリズムを作成する

分類Dev

whileとforを使用したアルゴリズムの複雑さ

分類Dev

3つのループを使用してアルゴリズムの複雑さを計算する

分類Dev

鴉羽アルゴリズムの複雑さを取得しますか?

分類Dev

Pythonでセットをリストに変換するためのアルゴリズムの複雑さ

分類Dev

複雑でないアルゴリズムを使用する理由

分類Dev

深い制限のある再帰的アルゴリズムの複雑さを計算する

分類Dev

アルゴリズムとアプローチの複雑さを計算する

分類Dev

HashTableを使用するアルゴリズムの複雑さを計算します

分類Dev

このアルゴリズムの計算の複雑さを軽減する方法は?

分類Dev

これら2つのアルゴリズムの空間と時間の複雑さを判断する方法は?

分類Dev

このアルゴリズムの時間と空間の複雑さを判断する方法は?

分類Dev

foreachを削除し、goアルゴリズムの複雑さを軽減する方法

分類Dev

3D配列をトラバースするアルゴリズムの複雑さ

分類Dev

Big O表記で再帰的アルゴリズムの複雑さを計算する方法は?

分類Dev

プリムアルゴリズムの複雑さは何ですか?

分類Dev

このアルゴリズムの実行時の複雑さ?

分類Dev

私のアルゴリズムの時間の複雑さ

分類Dev

再帰的なアルゴリズムの複雑さの分析

分類Dev

Data.Hashtableのアルゴリズムの複雑さ

分類Dev

アルゴリズムの複雑さと実際の状況?

分類Dev

Idsアルゴリズムの空間の複雑さ

分類Dev

アルゴリズムのBig-Oの複雑さ

Related 関連記事

  1. 1

    中央値アルゴリズムの中央値の複雑さを理解する方法は?

  2. 2

    アルゴリズムの複雑さを数える-BigO

  3. 3

    次のアルゴリズムの次数の複雑さを計算する方法

  4. 4

    BigOの複雑さを改善するためのアルゴリズム

  5. 5

    HashMap検索アルゴリズムの複雑さを計算する方法は?

  6. 6

    オブジェクトをハッシュとして使用するJavaScriptアルゴリズムの複雑さを理解する

  7. 7

    複雑さが指定された再帰的アルゴリズムを作成する

  8. 8

    whileとforを使用したアルゴリズムの複雑さ

  9. 9

    3つのループを使用してアルゴリズムの複雑さを計算する

  10. 10

    鴉羽アルゴリズムの複雑さを取得しますか?

  11. 11

    Pythonでセットをリストに変換するためのアルゴリズムの複雑さ

  12. 12

    複雑でないアルゴリズムを使用する理由

  13. 13

    深い制限のある再帰的アルゴリズムの複雑さを計算する

  14. 14

    アルゴリズムとアプローチの複雑さを計算する

  15. 15

    HashTableを使用するアルゴリズムの複雑さを計算します

  16. 16

    このアルゴリズムの計算の複雑さを軽減する方法は?

  17. 17

    これら2つのアルゴリズムの空間と時間の複雑さを判断する方法は?

  18. 18

    このアルゴリズムの時間と空間の複雑さを判断する方法は?

  19. 19

    foreachを削除し、goアルゴリズムの複雑さを軽減する方法

  20. 20

    3D配列をトラバースするアルゴリズムの複雑さ

  21. 21

    Big O表記で再帰的アルゴリズムの複雑さを計算する方法は?

  22. 22

    プリムアルゴリズムの複雑さは何ですか?

  23. 23

    このアルゴリズムの実行時の複雑さ?

  24. 24

    私のアルゴリズムの時間の複雑さ

  25. 25

    再帰的なアルゴリズムの複雑さの分析

  26. 26

    Data.Hashtableのアルゴリズムの複雑さ

  27. 27

    アルゴリズムの複雑さと実際の状況?

  28. 28

    Idsアルゴリズムの空間の複雑さ

  29. 29

    アルゴリズムのBig-Oの複雑さ

ホットタグ

アーカイブ