アルゴリズムの複雑さイタリックスタイルのアルゴリズムの
複雑さは、アルゴリズムの効率の尺度であり、アルゴリズムは長所と短所を評価するための重要な基礎です。アルゴリズムの複雑さは、アルゴリズムの実行に必要なコンピューターリソースの量に反映されます。必要なリソースが多いほど、アルゴリズムの複雑さは高くなります。逆に、必要なリソースは少なくなります。アルゴリズムの複雑さが低くなります。
最も重要なコンピュータリソースは、時間と空間(つまりメモリ)リソースです。したがって、アルゴリズムの複雑さは、時間の複雑さと空間の複雑さに分けられます。
特定の問題について、可能な限り複雑度の低いアルゴリズムを設計することは、アルゴリズムを設計するときに追求する重要な目標です。一方、特定の問題に対して複数のアルゴリズムがある場合は、最も複雑度の低いものを選択します。 、適応するアルゴリズムを選択する際に従う重要な基準です。したがって、アルゴリズムの複雑さの分析は、アルゴリズムの設計または選択にとって重要な指針となる重要性と実用的な価値を持っています。
要するに、アルゴリズム学習プロセスでは、最初にアルゴリズムを分析して、アルゴリズムの長所と短所を判断または判断することを学ぶ必要があります。
1.時間の複雑さ:
例1:设一程序段如下(为讨论方便,每行前加一行号)
(1) for i:=1 to n do
(2) for j:=1 to n do
(3) x:=x+1 ......
试问在程序运行中各步执行的次数各为多少?
解答:行号 次数(频度)
(1) n+1
(2) n*(n+1)
(3) n*n
可见,这段程序总的执行次数是:f(n)=2n2+2n+1。在这里,n可以表示问题的规模,当n趋向无穷大时,如果 f(n)的值很小,则算法优。作为初学者,我们可以用f(n)的数量级O来粗略地判断算法的时间复杂性,如上例中的时间复杂性可粗略地表示为T(n)=O(n2)。
2.スペースの複雑さ:
例2:将一一维数组的数据(n个)逆序存放到原数组中,下面是实现该问题的两种算法:
算法1:
for i:=1 to n do
b[i]:=a[n-i+1];
for i:=1 to n do
a[i]:=b[i];
算法2:
for i:=1 to n div 2 do
begin
t:=a[i];a[i]:=a[n-i-1];a[n-i-1]:=t
end;
算法1的时间复杂度为2n,空间复杂度为2n
算法2的时间复杂度为3*n/2,空间复杂度为n+1
显然算法2比算法1优,这两种算法的空间复杂度可粗略地表示为S(n)=O(n)。