ඇල්ගොරිතම විශ්ලේෂණයේ මැජික් පිටුපස පද්ධතියක් තිබේද?


168

ඇල්ගොරිතම වල ධාවන කාලය විශ්ලේෂණය කරන්නේ කෙසේද යන්න පිළිබඳ ප්‍රශ්න රාශියක් ඇත (බලන්න, උදා: සහ ). බොහෝ ඒවා සමාන ය, නිදසුනක් ලෙස කූඩු ලූප පිළිබඳ පිරිවැය විශ්ලේෂණයක් ඉල්ලා සිටින අය හෝ ඇල්ගොරිතම බෙදීමට හා යටත් කර ගැනීමට ඉල්ලන නමුත් බොහෝ පිළිතුරු ගැලපෙන පරිදි සකස් කර ඇති බව පෙනේ.

අනෙක් අතට, තවත් පොදු ප්‍රශ්නයකට පිළිතුරු විශාල පින්තූරයක් (විශේෂයෙන් අසමමිතික විශ්ලේෂණය සම්බන්ධයෙන්) උදාහරණ කිහිපයක් සමඟ පැහැදිලි කරයි, නමුත් ඔබේ දෑත් අපිරිසිදු කරන්නේ කෙසේද යන්න නොවේ.

ඇල්ගොරිතමවල පිරිවැය විශ්ලේෂණය කිරීම සඳහා ව්‍යුහාත්මක, පොදු ක්‍රමයක් තිබේද? පිරිවැය ක්‍රියාත්මක වන කාලය (කාල සංකීර්ණතාව) හෝ ක්‍රියාත්මක කරන ලද සැසඳීම් ගණන, අවකාශයේ සංකීර්ණතාව හෝ වෙනත් දෙයක් වැනි වෙනත් වියදම් මිනුමක් විය හැකිය.

මෙය ආරම්භකයින් වෙත යොමු කිරීම සඳහා භාවිතා කළ හැකි යොමු ප්‍රශ්නයක් බවට පත්වේ ; එබැවින් එහි සාමාන්‍ය විෂය පථයට වඩා පුළුල් ය. අවම වශයෙන් එක් උදාහරණයකින් නිරූපණය කළ හැකි නමුත් බොහෝ අවස්ථාවන් ආවරණය වන පරිදි සාමාන්‍ය, ප්‍රායෝගිකව ඉදිරිපත් කරන ලද පිළිතුරු ලබා දීමට කරුණාකර සැලකිලිමත් වන්න. ස්තූතියි!


4
මෙතරම් දීර් posts ලිපි ලිවීම පහසු කිරීම ගැන ස්ටැක් එඩිට් හි කතුවරයාට (ස්තූතියි) යන්න. මගේ බීටා පා readers කයින් වන ෆ්‍රෑන්ක් ඩබ්ලිව් , ජුහෝ , ගිලෙස් සහ සෙබස්තියන් මට කලින් කෙටුම්පත් වල තිබූ අඩුපාඩු ගණනාවක් විසඳීමට උදව් කිරීම ගැන ස්තූතියි .
රෆායෙල්

1
හේයි @ රෆායෙල්, මේක අපූරු දෙයක්. මම හිතුවේ මම එය PDF ලෙස එකට සංසරණය වීමට යෝජනා කරනවාද? මෙවැනි දේ ඇත්තෙන්ම ප්‍රයෝජනවත් යොමු කිරීමක් විය හැකිය.
hadsed

1
dshadsed: ස්තූතියි, එය ඔබට ප්‍රයෝජනවත් වීම ගැන මට සතුටුයි! දැනට, මම කැමතියි මෙම තනතුරට සබැඳියක් වටා බෙදා හැරීමට. කෙසේ වෙතත්, SE පරිශීලක අන්තර්ගතය "අවශ්‍ය ආරෝපණය සමඟ cc by-sa 3.0 යටතේ බලපත්‍ර ලබා දී ඇත" (පිටු පාදකය බලන්න) එබැවින් ඕනෑම කෙනෙකුට ආරෝපණය ලබා දෙන තාක් කල් එයින් PDF එකක් සෑදිය හැකිය.
රෆායෙල්

2
මම මේ සම්බන්ධයෙන් විශේෂයෙන් ම දක්ෂ නොවෙමි, නමුත් මාස්ටර් ප්‍රමේයය පිළිබඳ කිසිදු සඳහනක් නොමැති වීම සාමාන්‍ය දෙයක් ද ?
බබු

1
“බාබු” මෙහි “සාමාන්‍ය” යන්නෙහි තේරුම කුමක්දැයි මම නොදනිමි. මගේ දෘෂ්ටි කෝණයෙන්, මාස්ටර් ප්‍රමේයයට මෙහි කිසිදු ව්‍යාපාරයක් නොමැත: මෙය ඇල්ගොරිතම විශ්ලේෂණය කිරීම, මාස්ටර් ප්‍රමේයය (සමහර) පුනරාවර්තන (සහ දළ වශයෙන්) විසඳීම සඳහා ඉතා නිශ්චිත මෙවලමකි. ගණිතය වෙනත් තැනක ආවරණය කර ඇති හෙයින් (උදා: මෙහි ) ඇල්ගොරිතමයේ සිට ගණිතය දක්වා වූ කොටසක් පමණක් ආවරණය කිරීමට මා තෝරාගෙන ඇත. මගේ පිළිතුරේ ගණිතය වැඩ කිරීම සම්බන්ධ ලිපි වලට මම යොමු කරමි.
රෆායෙල්

Answers:


144

කේතය ගණිතයට පරිවර්තනය කිරීම

(වැඩි හෝ අඩු) විධිමත් මෙහෙයුම් අර්ථකථනයක් ලබා දී ඔබට ඇල්ගොරිතමයේ (ව්‍යාජ) කේතයක් වචනාර්ථයෙන් ගණිතමය ප්‍රකාශනයකට පරිවර්ථනය කළ හැකි අතර එය ප්‍රති result ලය ලබා දෙයි. සැසඳීම් ගණන, හුවමාරුව, ප්‍රකාශ, මතක ප්‍රවේශයන්, සමහර වියුක්ත යන්ත්‍ර අවශ්‍යතා සඳහා වන චක්‍ර වැනි ආකලන පිරිවැය මිනුම් සඳහා මෙය හොඳින් ක්‍රියා කරයි .

උදාහරණය: බබල්සෝර්ට් හි සැසඳීම්

දී ඇති අරාව වර්ග කරන මෙම ඇල්ගොරිතම සලකා බලන්න A:

 bubblesort(A) do                   1
  n = A.length;                     2
  for ( i = 0 to n-2 ) do           3
    for ( j = 0 to n-i-2 ) do       4
      if ( A[j] > A[j+1] ) then     5
        tmp    = A[j];              6
        A[j]   = A[j+1];            7
        A[j+1] = tmp;               8
      end                           9
    end                             10
  end                               11
end                                 12

සුපුරුදු වර්ග කිරීමේ ඇල්ගොරිතම විශ්ලේෂණය කිරීමට අපට අවශ්‍ය යැයි කියමු, එනම් මූලද්‍රව්‍ය සැසඳීම් ගණන (5 වන පේළිය). අපි මේ ප්රමාණය අරා අන්තර්ගත මත පදනම් නොවී, වහාම කරුණාවෙන් Aපමණක් එහි දිග මත . එබැවින් අපට (කැදැලි) ලූප් වචනාර්ථයෙන් (කැදැලි) මුදල් බවට පරිවර්තනය කළ හැකිය ; ලූප් විචල්‍යය සාරාංශ විචල්‍යය බවට පත්වන අතර පරාසය ඉක්මවා යයි. අපට ලැබෙන්නේ:nfor

Ccmp(n)=i=0n2j=0ni21==n(n1)2=(n2) ,

මෙහි යනු 5 වන පේළිය ක්‍රියාත්මක කිරීම සඳහා වන පිරිවැයයි (අප ගණන් කරන).1

උදාහරණය: බබල්සෝර්ට් හි හුවමාරුව

මම විසින් නිර්මනය කරන්නම් රැහැන් සමන්විත බව subprogram කිරීමට හා විසින් වන මෙම subprogram ක්රියාත්මක කිරීමේ පිරිවැය (එක් වරක්). C i , jPi,jijCi,j

දැන් අපි කියමු අපට හුවමාරුව ගණන් කිරීමට අවශ්‍යයි , එනම් ක්‍රියාත්මක වන වාර ගණන එයයි. මෙය "මූලික බ්ලොක්" එකක් වන අතර එය සෑම විටම පරමාණුකව ක්‍රියාත්මක වන අතර යම් නියත පිරිවැයක් දරණ උප ප්‍රෝග්‍රෑම් එකකි (මෙහි ). එවැනි කොටස් සංකෝචනය කිරීම යනු අප බොහෝ විට අදාළ වන්නේ ඒ ගැන සිතීම හෝ කතා කිරීමකින් තොරවය. 1P6,81

ඉහත සමාන පරිවර්තනයකින් අපි පහත සූත්‍රයට පැමිණෙමු:

Cswaps(A)=i=0n2j=0ni2C5,9(A(i,j)) .

( i , j ) P 5 , 9A(i,j) යන්නෙන් දැක්වෙන්නේ - it හි පුනරාවර්තනයට පෙර අරාවෙහි තත්වයයි .(i,j)P5,9

මම පරාමිතිය ලෙස වෙනුවට භාවිතා බව සලකන්න ; අපි ඉක්මනින්ම බලමු ඇයි කියලා. of හි පරාමිතීන් ලෙස සහ එකතු නොකරමි, මන්ද මෙහි පිරිවැය ඒවා මත රඳා නොපවතී ( ඒකාකාර පිරිවැය ආකෘතියේ , එනම්); පොදුවේ ගත් කල, ඔවුන් එසේ කළ හැකිය.n i j C 5 , 9AnijC5,9

පැහැදිලිවම, of හි පිරිවැය හි අන්තර්ගතය මත රඳා පවතී (අගයන් සහ , විශේෂයෙන්) එබැවින් අපි ඒ සඳහා ගණන් ගත යුතුය. දැන් අපි අභියෝගයකට මුහුණ දී සිටිමු: අපි "" ගන්නේ " කෙසේද? හොඳයි, අපි අන්තර්ගතය මත රඳා පැවැතීමට කළ හැකි පැහැදිලි:සී 5 , 9P5,9AA[j]A[j+1]C5,9A

C5,9(A(i,j))=C5(A(i,j))+{1,A(i,j)[j]>A(i,j)[j+1]0,else .

ඕනෑම ආදාන අරාවක් සඳහා, මෙම පිරිවැය මනාව නිර්වචනය කර ඇත, නමුත් අපට වඩාත් පොදු ප්‍රකාශයක් අවශ්‍යය; අපි ශක්තිමත් උපකල්පන කළ යුතුයි. සාමාන්‍ය අවස්ථා තුනක් විමර්ශනය කරමු.

  1. නරකම අවස්ථාව

    that බව සඳහන් කිරීමෙන් පමණක්, පිරිවැය සඳහා සුළු ඉහළ සීමාවක් අපට සොයාගත හැකිය:C5,9(A(i,j)){0,1}

    Cswaps(A)i=0n2j=0ni21=n(n1)2=(n2) .

    නමුත් මෙය සිදුවිය හැකිද , එනම් මෙම ඉහළ සීමාව ලබා ගැනීම සඳහා තිබේද? පෙනෙන ආකාරයට, ඔව්: අපි ප්‍රතිලෝමව යුගල වශයෙන් යුගල වශයෙන් වෙනස් වූ මූලද්‍රව්‍ය සමූහයක් ඇතුළත් කරන්නේ නම්, සෑම ක්‍රියාවලියක්ම ස්වප් එකක් සිදු කළ යුතුය. එම නිසා, අපි බබ්ල්සෝර්ට් හි හුවමාරුවෙහි නරකම අවස්ථාව ලබාගෙන ඇත.A

  2. හොඳම නඩුව

    අනෙක් අතට, සුළු සුළු සීමාවක් ඇත:

    Cswaps(A)i=0n2j=0ni20=0 .

    මෙයද සිදුවිය හැකිය: දැනටමත් වර්ග කර ඇති අරාව මත, බබල්සෝර්ට් එක හුවමාරුවක් ක්‍රියාත්මක නොකරයි.

  3. සාමාන්‍ය නඩුව

    නරකම හා හොඳම අවස්ථාව තරමක් පරතරයක් විවෘත කරයි. නමුත් සාමාන්‍ය හුවමාරු සංඛ්‍යාව කුමක්ද? මෙම ප්‍රශ්නයට පිළිතුරු සැපයීම සඳහා, “සාමාන්‍ය” යන්නෙන් අදහස් කරන්නේ කුමක්ද යන්න අප විසින් නිර්වචනය කළ යුතුය. න්‍යාය අනුව, අපට එක් ආදානයකට වඩා වැඩි කැමැත්තක් දැක්වීමට කිසිදු හේතුවක් නොමැති අතර, එබැවින් අපි සාමාන්‍යයෙන් හැකි සෑම යෙදවුම් වලටම ඒකාකාර බෙදාහැරීමක් උපකල්පනය කරමු , එනම් සෑම ආදානයක්ම එක හා සමාන විය හැකිය. අපි යුගල වශයෙන් එකිනෙකට වෙනස් මූලද්‍රව්‍යයන් සහිත අරා වලට පමණක් සීමා වන අතර එමඟින් අහඹු ප්‍රේරණ ආකෘතිය උපකල්පනය කරමු .

    එවිට, අපගේ පිරිවැය මේ ආකාරයට නැවත ලිවිය හැකිය:

    E[Cswaps]=1n!Ai=0n2j=0ni2C5,9(A(i,j))

    දැන් අපට සරල මුදල් පරිහරණයෙන් ඔබ්බට යා යුතුය. ඇල්ගොරිතම දෙස බැලීමෙන්, සෑම හුවමාරුවක්ම හි එක් ප්‍රතිලෝමයක් හරියටම ඉවත් කරන බව අපි සටහන් කරමු (අපි කවදා හෝ අසල්වැසියන් පමණක් හුවමාරු කර ගනිමු). මත සිදු වන්නේ ද හුවමාරු සංඛ්යාව බව inversions හරියටම සංඛ්යාව වේ ක . මේ අනුව, අපට අභ්‍යන්තර මුදල් දෙක ප්‍රතිස්ථාපනය කර ලබා ගත හැකියAAinv(A)A

    E[Cswaps]=1n!Ainv(A) .

    අපට වාසනාවකි, සාමාන්‍ය ප්‍රතිලෝම ගණන තීරණය කර ඇත

    E[Cswaps]=12(n2)

    එය අපගේ අවසාන ප්‍රති .ලයයි. මෙය හරියටම නරකම වියදමෙන් අඩක් බව සලකන්න .


  1. i = n-1කිසි විටෙකත් කිසිවක් නොකරන පිටත ලූපය සමඟ “අන්තිම” පුනරාවර්තනය ක්‍රියාත්මක නොවන පරිදි ඇල්ගොරිතම ප්‍රවේශමෙන් සකස් කර ඇති බව සලකන්න .
  2. " " යනු "අපේක්ෂිත අගය" සඳහා ගණිතමය අංකනයකි, මෙහි සාමාන්‍යය පමණි.E
  3. අසල්වැසි මූලද්‍රව්‍ය පමණක් මාරු කරන කිසිදු ඇල්ගොරිතමයක් බබල්සෝර්ට් වලට වඩා අසමමිතික ලෙස වේගවත් විය නොහැකි බව අපි ඉගෙන ගනිමු (ප්‍රතිලෝම ගණන එවැනි සියලු ඇල්ගොරිතම සඳහා අඩු සීමාවක් වේ. මෙය උදා: ඇතුළත් කිරීමේ වර්ග කිරීම සහ තේරීම් වර්ග කිරීම සඳහා අදාළ වේ .

සාමාන්‍ය ක්‍රමය

පාලන ව්‍යුහය ගණිතයට පරිවර්තනය කළ යුතු බව අපි උදාහරණයෙන් දුටුවෙමු. පරිවර්තන නීති පිළිබඳ සාමාන්‍ය සමූහයක් මම ඉදිරිපත් කරමි. කිසියම් උප ප්‍රෝග්‍රෑම් එකක පිරිවැය වත්මන් තත්වය , එනම් (දළ වශයෙන්) විචල්‍යයන්ගේ වත්මන් අගයන් මත රඳා පවතින බව ද අපි දැක ඇත්තෙමු . ඇල්ගොරිතම (සාමාන්‍යයෙන්) තත්වය වෙනස් කරන බැවින්, සාමාන්‍ය ක්‍රමය සටහන් කිරීමට තරමක් කරදරකාරී ය. ඔබට ව්‍යාකූල බවක් දැනෙන්නට පටන් ගන්නේ නම්, මම ඔබට යෝජනා කරන්නේ ආදර්ශයට ආපසු යන්න හෝ ඔබේම දෑ සාදා ගන්න.

අපි වර්තමාන තත්වය සමඟ (එය විචල්‍ය පැවරුම් සමූහයක් ලෙස සිතන්න). අපි රාජ්‍ය ආරම්භ වන වැඩසටහනක් ක්‍රියාත්මක කරන විට , අපි අවසන් වන්නේ ( අවසන් වූ විට).ψPψψ/PP

  • තනි ප්‍රකාශ

    එක් ප්‍රකාශයක් පමණක් ලබා දී S;, ඔබ එයට . මෙය සාමාන්‍යයෙන් නියත ශ්‍රිතයක් වනු ඇත.CS(ψ)

  • ප්‍රකාශන

    ඔබට Eපෝරමයේ ප්‍රකාශනයක් තිබේ නම් E1 ∘ E2(කියන්න, එකතු කිරීම හෝ ගුණ කිරීම විය හැකි අංක ගණිත ප්‍රකාශනයක් නම් , ඔබ පුනරාවර්තන ලෙස පිරිවැය එකතු කරයි:

    CE(ψ)=c+CE1(ψ)+CE2(ψ) .

    එය සටහන් කර ගන්න

    • මෙහෙයුම් පිරිවැය constant නියත නොවිය හැකි නමුත් සහ සහcE1E2
    • ප්‍රකාශන ඇගයීම බොහෝ භාෂාවලින් තත්වය වෙනස් කළ හැකිය,

    එබැවින් ඔබට මෙම රීතිය සමඟ නම්‍යශීලී වීමට සිදුවනු ඇත.

  • අනුක්රමය

    වැඩසටහන් Pඅනුපිළිවෙලක් ලෙස වැඩසටහනක් ලබා දී Q;R, ඔබ පිරිවැය එකතු කරයි

    CP(ψ)=CQ(ψ)+CR(ψ/Q) .

  • කොන්දේසි

    Pපෝරමයේ වැඩසටහනක් අනුව if A then Q else R end, පිරිවැය රාජ්යය මත රඳා පවතී:

    CP(ψ)=CA(ψ)+{CQ(ψ/A),A evaluates to true under ψCR(ψ/A),else

    පොදුවේ ගත් කල, ඇගයීම Aමගින් රාජ්‍යය ඉතා හොඳින් වෙනස් කළ හැකිය, එබැවින් තනි ශාඛා වල පිරිවැය යාවත්කාලීන කිරීම.

  • For-Loops

    Pපෝරමයේ වැඩසටහනක් ලබා දී for x = [x1, ..., xk] do Q end, පිරිවැය පවරන්න

    CP(ψ)=cinit_for+i=1kcstep_for+CQ(ψi{x:=xi})

    එහිදී රාජ්ය සකසන ඉදිරියේ ඇති වටිනාකම සඳහා , එනම්, සමග ප්රතිඵලයක්ම පසු කිරීමට හැකි වීම , ..., .ψiQxixx1xi-1

    ලූප් නඩත්තුව සඳහා අමතර නියතයන් සැලකිල්ලට ගන්න; ලූප් විචල්‍යය නිර්මාණය කළ යුතුය ( ) සහ එහි අගයන් පවරා ඇත ( ). එතැන් සිට මෙය අදාළ වේcinit_forcstep_for

    • ඊළඟ ගණනය කිරීම xiමිල අධික විය හැකිය
    • forහිස් ශරීරයක් සහිත -ලූප් (උදා: නිශ්චිත පිරිවැයක් සහිත හොඳම අවස්ථාවක සරල කිරීමෙන් පසු) එය පුනරාවර්තන සිදු කරන්නේ නම් ශුන්‍ය පිරිවැයක් නොමැත.
  • අතර-ලූප

    Pපෝරමයේ වැඩසටහනක් ලබා දී while A do Q end, පිරිවැය පවරන්න

    CP(ψ) =CA(ψ)+{0,A evaluates to false under ψCQ(ψ/A)+CP(ψ/A;Q), else

    ඇල්ගොරිතම පරීක්ෂා කිරීමෙන්, මෙම පුනරාවර්තනය බොහෝ විට ලූප සඳහා වන මුදලට සමාන මුදලක් ලෙස නිරූපණය කළ හැකිය.

    උදාහරණය: මෙම කෙටි ඇල්ගොරිතම සලකා බලන්න:

    while x > 0 do    1
      i += 1          2
      x = x/2         3
    end               4
    

    රීතිය ක්‍රියාත්මක කිරීමෙන් අපට ලැබේ

    C1,4({i:=i0;x:=x0}) =c<+{0,x00c+=+c/+C1,4({i:=i0+1;x:=x0/2}), else

    නියත පිරිවැය සමඟ individual තනි ප්‍රකාශ සඳහා. අපි මේ කරන්නේ ඒ නිසැකයෙන්ම උපකල්පනය නො (වටිනාකම් රාජ්ය මත රඳා පවතී හා ); මෙය "යථාර්ථය" තුළ සත්‍ය හෝ නොවිය හැකිය: පිටාර ගැලීම් ගැන සිතන්න!cix

    දැන් අපි for සඳහා මෙම පුනරාවර්තනය විසඳිය යුතුයි . පුනරාවර්තන ගණන හෝ ලූප් ශරීරයේ පිරිවැය රඳා නොපවතින බව අපි සටහන් කරමු , එබැවින් අපට එය අතහැර දැමිය හැකිය. මෙම පුනරාවර්තනය අපට ඉතිරිව ඇත:C1,4i

    C1,4(x)={c>,x0c>+c+=+c/+C1,4(x/2), else

    මෙම සමාජමය සහ මූලික මාධ්යයක් කිරීමට

    C1,4(ψ)=log2ψ(x)(c>+c+=+c/)+c> ,

    සංකේතාත්මකව පූර්ණ රාජ්‍යය නැවත හඳුන්වා දීම; if නම් , .ψ={,x:=5,}ψ(x)=5

  • ක්‍රියා පටිපාටි ඇමතුම්

    වැඩසටහනක් ලබා Pආකෘති M(x)සමහර පරාමිතිය සඳහා (ව) xඑහිදී M(නම්) පරාමිතිය සමඟ ක්රියා පටිපාටියක් p, සකාට වියදම්

    CP(ψ)=ccall+CM(ψglob{p:=x}) .

    අතිරේක නියතය (එය ඇත්ත වශයෙන්ම මත රඳා පවතී !) නැවත සටහන් කරන්න. ක්‍රියා පටිපාටි ඇමතුම් සැබෑ යන්ත්‍ර මත ක්‍රියාත්මක වන ආකාරය නිසා මිල අධික වන අතර සමහර විට ධාවන වේලාවන්හි පවා ආධිපත්‍යය දරයි (උදා: ෆිබොනාච්චි සංඛ්‍යා පුනරාවර්තනය බොළඳ ලෙස තක්සේරු කිරීම).ccallψ

    ඔබට මෙහි ඇති රාජ්‍යය සමඟ ඇති විය හැකි අර්ථකථන ගැටළු කිහිපයක් ගැන මම විස්තර කරමි. ගෝලීය රාජ්‍යය සහ එවැනි දේශීය ක්‍රියා පටිපාටි ඇමතුම් වෙන්කර හඳුනා ගැනීමට ඔබට අවශ්‍ය වනු ඇත. අප මෙහි පමණක් ගෝලීය රාජ්ය සමත් එහෙනම් අපි දැන් උපකල්පනය සහ Mවටිනාකම තබමින් ආරම්භනය නව දේශීය රාජ්ය, ලැබෙන pකිරීමට x. තවද, xඑය සම්මත කිරීමට පෙර ඇගයීමට ලක් කිරීමට අප (සාමාන්‍යයෙන්) උපකල්පනය කරන ප්‍රකාශනයක් විය හැකිය.

    උදාහරණය: ක්රියා පටිපාටිය සලකා බලන්න

    fac(n) do                  
      if ( n <= 1 ) do         1
        return 1               2
      else                     3
        return n * fac(n-1)    4
      end                      5
    end                        
    

    රීති (ය) අනුව, අපට ලැබෙන්නේ:

    Cfac({n:=n0})=C1,5({n:=n0})=c+{C2({n:=n0}),n01C4({n:=n0}), else=c+{creturn,n01creturn+c+ccall+Cfac({n:=n01}), else

    facපැහැදිලිවම කිසිවකට ප්‍රවේශ නොවන පරිදි අපි ගෝලීය රාජ්‍යය නොසලකා හරින බව සලකන්න . මෙම විශේෂිත පුනරාවර්තනය විසඳීමට පහසුය

    Cfac(ψ)=ψ(n)(c+creturn)+(ψ(n)1)(c+ccall)

සාමාන්‍ය ව්‍යාජ කේතයකින් ඔබට හමු වන භාෂා අංග අපි ආවරණය කර ඇත්තෙමු. ඉහළ මට්ටමේ ව්‍යාජ කේත විශ්ලේෂණය කිරීමේදී සැඟවුණු වියදම් වලින් පරිස්සම් වන්න; සැකයක් ඇත්නම්, දිග හැරෙන්න. අංකනය අවුල් සහගත බවක් පෙනෙන්නට ඇති අතර එය නිසැකවම රසයේ කාරණයක් වේ; ලැයිස්තුගත කර ඇති සංකල්ප නොසලකා හැරිය නොහැකිය. කෙසේ වෙතත්, යම් අත්දැකීමක් සමඟ ඔබට පිරිවැය මැනීම සඳහා කුමන ප්‍රාන්තයේ අදාළද යන්න වහාම දැකගත හැකිය, උදාහරණයක් ලෙස “ගැටළු ප්‍රමාණය” හෝ “සිරස් ගණන”. ඉතිරිය අතහැර දැමිය හැකිය - මෙය සැලකිය යුතු ලෙස දේවල් සරල කරයි!

මෙය බෙහෙවින් සංකීර්ණ යැයි ඔබ දැන් සිතන්නේ නම්, උපදෙස් දෙන්න: එය එසේ ය ! ධාවන කාල අනාවැකි (සාපේක්ෂ ඒවා පවා) සක්‍රීය කිරීම සඳහා සැබෑ යන්ත්‍රවලට ආසන්නව ඇති ඕනෑම ආකෘතියක ඇල්ගොරිතම සඳහා නිශ්චිත පිරිවැය ලබා ගැනීම දැඩි උත්සාහයකි. සැබෑ යන්ත්‍ර මත හැඹිලි සහ වෙනත් අප්රසන්න බලපෑම් පවා එය නොසලකයි.

එබැවින්, ඇල්ගොරිතම විශ්ලේෂණය බොහෝ විට ගණිතමය වශයෙන් පත්‍රිකා ගත හැකි මට්ටමට සරල කර ඇත. නිදසුනක් ලෙස, ඔබට නිශ්චිත පිරිවැයක් අවශ්‍ය නොවන්නේ නම්, ඔබට ඕනෑම අවස්ථාවක අධික ලෙස හෝ අවතක්සේරු කළ හැකිය (ඉහළ ප්‍රතිචාර සඳහා පහළ සීමාවන් සඳහා): නියතයන් අඩු කිරීම, කොන්දේසි ඉවත් කිරීම, මුදල් සරල කිරීම සහ යනාදිය.

අසමමිතික පිරිවැය පිළිබඳ සටහනක්

ඔබ සාමාන්‍යයෙන් සාහිත්‍යයේ සහ වෙබ් අඩවි වල සොයාගනු ඇත්තේ "බිග්-ඕ විශ්ලේෂණය" ය. නිසි යෙදුම අසමමිතික විශ්ලේෂණයකි, එයින් අදහස් කරන්නේ අප උදාහරණවල දී මෙන් නිශ්චිත පිරිවැය ලබා ගැනීම වෙනුවට, ඔබ පිරිවැය ලබා දෙන්නේ නියත සාධකයක් දක්වා සහ සීමාව තුළ පමණි (දළ වශයෙන් කිවහොත්, “විශාල ”).n

යන්ත්රය, මෙහෙයුම් පද්ධතිය සහ වෙනත් සාධක මත පදනම්ව වියුක්ත ප්රකාශයන් යථාර්ථයේ සමහර (සාමාන්යයෙන් නොදන්නා) පිරිවැයක් ඇති බැවින් මෙය (බොහෝ විට) සාධාරණ වන අතර , ක්රියාත්මක වන ක්රියාවලිය මුලින් ම ක්රියාත්මක කිරීම සහ වොට්නොට් විසින් කෙටි ධාවන කාලයන් ආධිපත්යය දරයි. ඒ නිසා ඔබට කෙසේ හෝ කරදරයක් ඇති වේ.

අසමමිතික විශ්ලේෂණය මෙම ප්‍රවේශයට සම්බන්ධ වන ආකාරය මෙන්න.

  1. අධිපති මෙහෙයුම් (පිරිවැය ඇති කරන) හඳුනා ගන්න , එය බොහෝ විට සිදුවන මෙහෙයුම් (නියත සාධක දක්වා). බබල්සෝර්ට් උදාහරණයේ දී, කළ හැකි එක් තේරීමක් වන්නේ 5 වන පේළියේ සංසන්දනයයි.

    විකල්පයක් ලෙස, මූලික මෙහෙයුම් සඳහා වන සියළුම නියතයන් ඒවායේ උපරිම (ඉහළ සිට) බැඳ තබන්න. ඒවායේ අවම (පහළ සිට) සහ සුපුරුදු විශ්ලේෂණය සිදු කරන්න.

  2. මෙම මෙහෙයුමේ පිරිවැය ගණනය කිරීමක් ලෙස විශ්ලේෂණය සිදු කරන්න.
  3. සරල කිරීමේදී, ඇස්තමේන්තු කිරීමට ඉඩ දෙන්න. ඔබේ ඉලක්කය ඉහළ සීමාවක් ( ) ප්‍රතිචාරයක් නම් ඉහළින් ඇස්තමේන්තු කිරීමට පමණක් ඉඩ දෙන්න . ඔබට පහළ සීමාවන් අවශ්‍ය නම් ( ) පහළ සිට .OΩ

ලන්ඩෝ සංකේතවල තේරුම ඔබ තේරුම් ගෙන ඇති බවට වග බලා ගන්න . අවස්ථා තුනටම එවැනි සීමාවන් පවතින බව මතක තබා ගන්න ; භාවිතා කිරීම නරකම විශ්ලේෂණයක් අදහස් නොකරයි.O

වැඩිදුර කීයවීම

ඇල්ගොරිතම විශ්ලේෂණයේ තවත් බොහෝ අභියෝග සහ උපක්‍රම තිබේ. මෙන්න නිර්දේශිත කියවීමකි.

ටැග් කර ඇති බොහෝ ප්‍රශ්න මේ හා සමාන තාක්‍ෂණික ක්‍රම භාවිතා කරයි.


1
අසමමිතික විශ්ලේෂණය සඳහා ප්‍රධාන ප්‍රමේයයට (සහ එහි දිගු ) සමහර යොමු කිරීම් සහ උදාහරණ
නිකොස් එම්.

IkNikosM එය මෙහි විෂය පථයෙන් බැහැර ය (ඉහත ප්‍රශ්නය පිළිබඳ අදහස් ද බලන්න). මාස්ටර් ප්‍රමේයය සහ වෙනත් අය ඉදිරිපත් කරන පුනරාවර්තන විසඳීම පිළිබඳ අපගේ යොමු සටහනට මම සම්බන්ධ වන බව සලකන්න.
රෆායෙල්

Ik නිකොස් එම්: මගේ $ 0.02: ප්‍රධාන ප්‍රමේයය පුනරාවර්තන කිහිපයක් සඳහා ක්‍රියා කරන අතර, එය තවත් බොහෝ දෙනෙකුට සිදු නොවේ. පුනරාවර්තන විසඳීම සඳහා සම්මත ක්‍රම තිබේ. ධාවන කාලය ලබා දෙන පුනරාවර්තනයක් පවා අපට නොලැබෙන ඇල්ගොරිතම ඇත; සමහර උසස් ගණන් කිරීමේ ක්‍රම අවශ්‍ය විය හැකිය. හොඳ ගණිත පසුබිමක් ඇති අයෙකු සඳහා, "පුනරාවර්තන සම්බන්ධතා", "උත්පාදක කාර්යයන්" සහ "අසමමිතික ඇස්තමේන්තු" වැනි පරිච්ඡේදයන් ඇති සෙඩ්ජිවික් සහ ෆ්ලජොලෙට්ගේ විශිෂ්ට ග්‍රන්ථය වන "ඇල්ගොරිතම විශ්ලේෂණය" යෝජනා කරමි. දත්ත ව්‍යුහයන් ඉඳහිට උදාහරණ ලෙස පෙන්වන අතර අවධානය යොමු වන්නේ ක්‍රම කෙරෙහි ය!
ජේ

1
Y Wyvern666 අවාසනාවකට, නැත. ඕනෑම කෙනෙකුට මේ වගේ දෙයක් සෑදීමට කියා ගත හැකි තාක් දුරට මම එය තනිවම සකස් කර ගතිමි. සමහර විට මම උපුටා දැක්විය හැකි කෘතියක් ලියමි. විශ්ලේෂණාත්මක සංයෝජක (ෆ්ලජොලෙට්, සෙජ්වික් සහ තවත් බොහෝ අය) වටා ඇති සමස්ත කාර්යයම මෙහි පදනමයි. ඔවුන් බොහෝ විට "කේතයේ" විධිමත් අර්ථකථන සමඟ කරදර වන්නේ නැත, නමුත් පොදුවේ "ඇල්ගොරිතම" වල ආකලන පිරිවැය සමඟ කටයුතු කිරීමට ගණිතය සපයයි. මම අවංකවම සිතන්නේ මෙහි දක්වා ඇති සංකල්ප එතරම් ගැඹුරු නොවන බවයි - ඔබට ලබා ගත හැකි ගණිතය.
රෆායෙල්

1
Ap රෆායෙල් හරි, හරිම රසවත්. මගේ අනෙක් ප්‍රශ්නය නම්, ඔබ "ආකලන පිරිවැය" ගැන, ඔබ මෙයින් අදහස් කරන්නේ කුමක්ද සහ "ආකලන නොවන පිරිවැය" මත වැඩ කිරීමට ගැටලුවක් වන්නේ මන්දැයි මම සටහන් කළෙමි. ස්තූතියි.
වයිවර්න් 666

31

ප්‍රකාශ ක්‍රියාත්මක කිරීමේ ගණන්

ඩොනල්ඩ් ඊ. නූත් විසින් රචිත The Art of Computer Programming කතා මාලාවේ තවත් ක්‍රමයක් තිබේ . සමස්ත ඇල්ගොරිතම එක් සූත්‍රයකට පරිවර්ථනය කිරීමට ප්‍රතිවිරුද්ධව , එය “දේවල් එකට එකතු කිරීම” පැත්තේ ඇති කේතයේ අර්ථ නිරූපණයෙන් ස්වාධීනව ක්‍රියා කරන අතර අවශ්‍ය විටෙක පමණක් පහත් මට්ටමකට යාමට ඉඩ සලසයි. සෑම ප්‍රකාශයක්ම අනෙක් ඒවායින් ස්වාධීනව විශ්ලේෂණය කළ හැකි අතර එය වඩාත් පැහැදිලි ගණනය කිරීම් වලට තුඩු දෙයි. කෙසේ වෙතත්, තාක්‍ෂණය එතරම් සවිස්තරාත්මක කේතයකට නැඹුරු වන අතර එතරම් ඉහළ මට්ටමේ ව්‍යාජ කේතයක් නොවේ.

ක්රමය

ප්‍රතිපත්තිමය වශයෙන් එය තරමක් සරල ය:

  1. සෑම ප්රකාශයක්ම නමක් / අංකයක් ලබා දෙන්න.
  2. සෑම ප්‍රකාශයක්ම යම් පිරිවැයක් .SiCi
  3. සෑම ප්‍රකාශයක් සඳහාම තීරණය කරන්න එහි ක්‍රියාත්මක කිරීම් ගණන .Siei
  4. මුළු පිරිවැය ගණනය කරන්න

    C=ieiCi .

ඔබට ඕනෑම වේලාවක ඇස්තමේන්තු සහ / හෝ සංකේතාත්මක ප්‍රමාණ ඇතුළත් කළ හැකිය. ප්‍රති result ලය ඒ අනුව සාමාන්‍යකරණය කිරීම.

3 වන පියවර අත්තනෝමතික ලෙස සංකීර්ණ විය හැකි බව මතක තබා ගන්න. ලබා ගැනීම සඳහා හි " as" වැනි (අසමමිතික) ඇස්තමේන්තු සමඟ වැඩ කිරීමට .e77O(nlogn)

උදාහරණය: ගැඹුරේ පළමු සෙවීම

පහත දැක්වෙන ප්‍රස්ථාර-ගමන් ඇල්ගොරිතම සලකා බලන්න:

dfs(G, s) do
  // assert G.nodes contains s
  visited = new Array[G.nodes.size]     1
  dfs_h(G, s, visited)                  2
end 

dfs_h(G, s, visited) do
  foo(s)                                3
  visited[s] = true                     4

  v = G.neighbours(s)                   5
  while ( v != nil ) do                 6
    if ( !visited[v] ) then             7
      dfs_h(G, v, visited)              8
    end
    v = v.next                          9
  end
end

(Ure නෝඩ් වල ඇති යාබද ලැයිස්තු මගින් (යොමු නොකළ) ප්‍රස්ථාරය ලබා දී ඇතැයි අපි උපකල්පනය කරමු . ඉඩ දාර සංඛ්යාව විය.{0,,n1}m

ඇල්ගොරිතම දෙස බැලීමෙන් අපට පෙනී යන්නේ සමහර ප්‍රකාශ අනෙක් ඒවා මෙන් සමානව ක්‍රියාත්මක වන බවයි. ක්‍රියාත්මක කිරීමේ ගණන් කිරීම සඳහා අපි , සහ කිහිපයක් හඳුන්වා දෙන්නෙමු :ABCei

i123456789eiAABBBB+CCB1C

විශේෂයෙන්, 8 වන පේළියේ ඇති සෑම පුනරාවර්තන ඇමතුම 3 වන පේළියේ ඇමතුමක් ඇති කරයි (සහ එකක් මුල් ඇමතුම නිසා ඇතිවේ ). තවද, මන්ද යත්, නැවත නැවත එක් වරක් තත්වය පරීක්ෂා කළ යුතු නමුත් එය හැර යාම සඳහා නැවත වරක් තත්වය පරීක්ෂා කළ යුතු බැවිනි .e8=e31foodfse6=e5+e7while

බව පැහැදිලිය . දැන්, නිරවද්‍යතාවය ඔප්පු කිරීමේදී අපි පෙන්වන්නේ එය එක් නෝඩයකට එක් වරක් ක්‍රියාත්මක වන බවයි; එනම්, . නමුත් පසුව, අපි සෑම යාබද ලැයිස්තුවකටම හරියටම එක් වරක් නැවත කියමු. සෑම දාරයක්ම ඇතුළත් කිරීම් දෙකක් අදහස් කරයි (එක් එක් සිදුවීම් නෝඩයට එකක්); අපට සම්පූර්ණ වශයෙන් පුනරාවර්තන ලැබේ. මෙය භාවිතා කරමින්, අපි පහත වගුව ව්‍යුත්පන්න කරමු:A=1fooB=nC=2m

i123456789ei11nnn2m+n2mn12m

මෙය හරියටම සම්පූර්ණ පිරිවැය වෙත අපව යොමු කරයි

C(n,m)=(C1+C2C8)+ n(C3+C4+C5+C6+C8)+ 2m(C6+C7+C9).

සඳහා සුදුසු අගයන් අපට වඩාත් නිශ්චිත පිරිවැයක් ලබා ගත හැකිය. උදාහරණයක් ලෙස, අපට මතක ප්‍රවේශයන් ගණන් කිරීමට අවශ්‍ය නම් (එක් වචනයකට), අපි භාවිතා කරමුCi

i123456789Cin00110101

ලබා ගන්න

Cmem(n,m)=3n+4m .

වැඩිදුර කීයවීම

මගේ අනෙක් පිළිතුරේ පහතින් බලන්න .


9

ප්‍රමේයය ඔප්පු කිරීම වැනි ඇල්ගොරිතම විශ්ලේෂණය බොහෝ දුරට කලාවකි (උදා: විශ්ලේෂණය කරන්නේ කෙසේදැයි අප නොදන්නා සරල වැඩසටහන් ( කොලට්ස් ගැටලුව වැනි ). රෆායෙල් විසින් විස්තීර්ණ ලෙස පිළිතුරු දුන් පරිදි අපට ඇල්ගොරිතම සංකීර්ණ ගැටලුවක් ගණිතමය වශයෙන් පරිවර්තනය කළ හැකිය , නමුත් දන්නා කාර්යයන් අනුව ඇල්ගොරිතමයක පිරිවැය පිළිබඳ සීමාවක් ප්‍රකාශ කිරීම සඳහා අපට ඉතිරිව ඇත්තේ:

  1. අප තේරුම් ගත් පුනරාවර්තන මත පදනම්ව සීමාවන් සොයා ගැනීම හෝ අපට ගණනය කළ හැකි එකතුව / අනුකලනයන් වැනි පවත්නා විශ්ලේෂණයන්ගෙන් අප දන්නා ශිල්පීය ක්‍රම භාවිතා කරන්න .
  2. විශ්ලේෂණය කිරීමට අප දන්නා දෙයකට ඇල්ගොරිතම වෙනස් කරන්න.
  3. සම්පූර්ණයෙන්ම නව ප්‍රවේශයක් සමඟ එන්න.

1
මෙය වෙනත් පිළිතුරු වලට වඩා ඉහළින් හා ප්‍රයෝජනවත් කිසිවක් එකතු කරන්නේ කෙසේදැයි මම නොදනිමි. ශිල්පීය ක්‍රම දැනටමත් වෙනත් පිළිතුරු වල විස්තර කර ඇත. මෙය මට පෙනෙන්නේ ප්‍රශ්නයට පිළිතුරකට වඩා අදහස් දැක්වීමක් මෙනි.
ඩීඩබ්ලිව්

1
අනෙක් පිළිතුරු එය කලාවක් නොවන බව ඔප්පු කරන බව මම විශ්වාස කරමි . ඔබට එය කිරීමට නොහැකි විය හැකිය (එනම් ගණිතය), සමහර නිර්මාණශීලිත්වය (දන්නා ගණිතය අදාළ වන්නේ කෙසේද යන්න) ඔබ සිටියත් අවශ්‍ය විය හැකි නමුත් එය ඕනෑම කාර්යයක් සඳහා සත්‍ය වේ . මම හිතන්නේ අපි මෙහි නව ගණිතය නිර්මාණය කිරීමට අපේක්ෂා නොකරමු. (ඇත්ත වශයෙන්ම, මෙම ප්‍රශ්නයට පිළිතුරු සපයයි. එහි පිළිතුරු සමස්ත ක්‍රියාවලියම අවලංගු කිරීමට අදහස් කරන ලදි.)
රෆායෙල්

4
Ap රෆායෙල් අරි කතා කරන්නේ “වැඩසටහන මඟින් ක්‍රියාත්මක කරන ලද උපදෙස් ගණනට වඩා” (ඔබේ පිළිතුර ආමන්ත්‍රණය කරන්නේ එයයි) යන්නට වඩා, හඳුනාගත හැකි ශ්‍රිතයක් බැඳීම ලෙස ඉදිරිපත් කිරීමයි. පොදු නඩුව වන්නේ කලා - සියලු ගණිත ක්රමයක් බලා යාත්රා කරන nontrivial සමග එන්න හැකි බවට කිසිදු ඇල්ගොරිතමය තියෙනවා. කෙසේ වෙතත්, පොදු නඩුව, දන්නා ශිල්පීය ක්‍රම සමූහයකි (ප්‍රධාන ප්‍රමේයය වැනි).
ගිලෙස්ගේ SO- නපුරු වීම නවත්වන්න '

Il ගිල්ස් කිසිදු ඇල්ගොරිතමයක් නොපවතින සෑම දෙයක්ම කලාවක් නම්, ශිල්පීන්ට (විශේෂයෙන් ක්‍රමලේඛකයන්ට) වඩාත් නරක ගෙවනු ලැබේ.
රෆායෙල්

1
Ri ඇරිට්‍රැක්ලන්බර්ග් වැදගත් කරුණක් ඉදිරිපත් කළත්, ඇල්ගොරිතම කාල සංකීර්ණතාව තක්සේරු කිරීමට විවිධ ක්‍රම තිබේ. බිග් ඕ අංකන නිර්වචන කතුවරයා මත පදනම්ව ඒවායේ න්‍යායාත්මක ස්වභාවය ඉඟි කරයි. "නරකම අවස්ථාව" පැහැදිලිවම කාමරයේ අනුමාන කිරීම සඳහා නව ඉඩක් විවෘත කරයි. අසමමිතික ඇස්තමේන්තු වල ස්වභාවය ගැන සඳහන් නොකල යුතුය.
බ්‍රයන් ඔග්ඩන්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.