時間の複雑さと計算の複雑さの違い


14

アルゴリズムの複雑さを測定するために、それは時間の複雑さですか、それとも計算の複雑さですか?それらの違いは何ですか?

アルゴリズムの基本的な(コストが最も高い)操作の最大(最悪)カウントを計算するために使用していました。


2
あなたの質問への答えではありませんが、この種のことに興味があるなら
DW

1
「アルゴリズムの複雑さ」は、漸近的なルーンメを指す場合、(頻繁に使用される)誤った呼び名です。「漸近ランタイム」と言いたいです。
ラファエル

回答:


9

時間を考慮するだけのリソースではないため、計算の複雑さはより一般的な用語です。次に最も明白なのは、アルゴリズムが使用する空間です。したがって、計算の複雑さの一部として、空間の複雑さについて話すことができます。確かに、私たちは、あなたがあなたが使用することを気にするあらゆる尺度に対してこれを行うことができます。もちろん、いくつかの尺度は他のものよりも有用です。

したがって、最悪の場合にアルゴリズムがとるステップの数を数えると、解決する問題の時間の複雑さの限界が得られ、使用するメモリ/テープセルの数を数えると、スペースの複雑さの限界などが得られます。

また、厳密にしたい場合、複雑さはアルゴリズムではなく問題を指しているため、問題には複雑さの限界があり、アルゴリズムにはリソースの限界がある(実行時間、スペースの使用...)それは単なる定義上の形式の問題であり、複雑性理論は問題を扱います。はい、アルゴリズムは問題と複雑さを分析するための重要なツールであり、アルゴリズムは密接に結びついていますが、正式にはMerge-Sort(アルゴリズム)がにあるとは言いません。それはある問題です。Merge-Sortは特定のリソースを使用したとえば、ステップ)。アルゴリズムのリソースの限界と正確さは、問題の複雑さ(上限)を意味しますが、それらは異なるものです。S o r t i n g P O n log n S o r t i n g T C 0 A C 0PSortngPOnログnSortngまた、ある下-complete -reductionsは、結合したこの複雑さは、実際の問題のために述べることができる(ただし、アルゴリズムの意味を持っています)。TC0AC0


@shekharsuman問題とは、一般的な意味ではなく、計算上の問題(k-Vertex Coverなど)の形式的な概念を意味します。計算の複雑さは、計算の問題の分類であるため、形式的な意味では、複雑さは問題について言えます。アルゴリズムに関する結果は、問題の複雑さに関する情報を提供しますが、それ自体は複雑さの結果ではありません(ただし、非公式にはアルゴリズムの複雑さについて話します)。
ルークマシソン

1
@shekharsumanのウィキペディアページの冒頭の段落は、かなり良い要約です。
ルークマティソン

@ルークありがとう、これは物事を明確にします。ただし、「アルゴリズムを正式に評価するために最もよく使用されるタイプの複雑さ」というイディオムを使用できる場合(これは正確ではありませんが)。時間対計算はどうなりますか?私が思うのは、一般的に最も重要なことは時間であるということです。リソースはある意味で拡張性があるからです!
ヒラル中央値

1
実際、@ MedianHilal時間は、問題の複雑さの最も一般的に考慮される尺度です。スペースはそれほど遅れていません(少なくとも複雑性理論家や、非常に大規模なデータセットを扱う人々は、それほど多くありません)。
ルークマティソン

-2

循環的複雑度は、多くの場合、計算の複雑度の尺度として使用されます。https://stackoverflow.com/questions/9097987/calculation-of-cyclomatic-complexityで役立つ例が提供されています。

アルゴリズムには多くの異なる(ネストされている可能性のある)パスがあり、高度な循環的複雑度を与えますが、ループはなく、時間的複雑度は低くなります。単一ループのプログラムでは、循環的複雑度は低くなりますが、時間的複雑度は高くなります。

周期的な複雑さは、コードに必要なメンテナンスの尺度としてよく使用されます。詳細については、http://docs.sonarqube.org/display/SONAR/Bad+Distribution+of+Complexityで説明しています。これは、コードの実行時測定である時間の複雑さとは異なり、システムの有効性に対するユーザーの認識を評価するために使用できます。


問題は、計算の複雑さに関するものであり、循環的複雑さに関するものではありません!
Am_I_Helpful

OPを読むことをお勧めします-彼はアルゴリズムの複雑さについて尋ねています-循環的な複雑さはアルゴリズムの計算の複雑さの静的な尺度を与えます-次回正のフィードバックを追加してみてください
-velvetytoast

2
循環的複雑度は、計算の複雑度を測定しません。計算の複雑さは、ソースコードの構造がどれほど複雑かではなく、実行時間を指します。
DW

@DWより正確には、計算の複雑さは、問題を解決するために必要なリソースを指します(スペース、交替、オラクルコールなど、および時間を含む場合があります)。
デビッドリチャービー

@DavidRicherby私はこれに関する専門家ではないので、間違っている場合は修正してください。状況によっては、プログラムのサイズなどの静的な複雑さの尺度が役割を果たします。私はそれがコルモゴロフの複雑さにもっと関連していることを修正していますか。サイクロマティックの複雑さにも当てはまりますか?プログラムまたは問題を記述するための複雑さの1種類と、それらを解決または実行するためのもう1種類の複雑さ...状況の簡単な概算。これについて賢明な質問を書くかどうかはわかりません。
-babou
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.