Algorithm ရှုပ်ထွေးမှုသည် အရင်းအမြစ်နှစ်ခုကို အဓိကအားဖြင့် ဖြေရှင်းသည်။:
အချိန်
(ကွပ်မျက်မှုကြာချိန်) နှင့်
အာကာသ
(မှတ်ဉာဏ်အသုံးပြုမှု)။ အချိန်ရှုပ်ထွေးမှု သည် input အရွယ်အစားဖြင့် runtime ကြီးထွားပုံကို တိုင်းတာနေစဉ် (
n
) အာကာသရှုပ်ထွေးမှုသည် မှတ်ဉာဏ်သုံးစွဲမှုကို အကဲဖြတ်သည်။ ဥပမာအားဖြင့်:
- နှင့်အတူ algorithm တစ်ခု
O(n)
အချိန် ရှုပ်ထွေးမှု စကေးသည် ထည့်သွင်းမှု အရွယ်အစားဖြင့် မျဉ်းညီစွာ တိုင်းတာသည်။
- နှင့်အတူ algorithm တစ်ခု
O(1)
space complexity သည် input size မခွဲခြားဘဲ ကိန်းသေမှတ်ဉာဏ်ကို အသုံးပြုသည်။
တိုင်းတာမှုနှစ်ခုလုံးသည် မရှိမဖြစ်လိုအပ်သည်။ မြန်ဆန်သော အယ်လဂိုရီသမ်တစ်ခုသည် ကြီးမားသောဒေတာအတွဲများတွင် မှတ်ဉာဏ်ကို ကုန်ဆုံးသွားစေနိုင်ပြီး မှတ်ဉာဏ်သက်သာသည့် အယ်လဂိုရီသမ်သည် အချိန်နှင့်တပြေးညီ အပလီကေးရှင်းများအတွက် အလွန်နှေးကွေးနိုင်ပါသည်။
Efficiency သည် ဖြစ်နိုင်ချေကို ညွှန်ပြသည်။ ပစ္စည်း 10 ခုနှင့် 10 သန်း၏စာရင်းကို စီရန်စဉ်းစားပါ။:
- A
ပူဖောင်းအမျိုးအစား
(
O(n)
) သေးငယ်သောဒေတာအတွဲများအတွက် လုံလောက်သော်လည်း ကြီးကြီးမားမားအတွက် အသုံးမဝင်ပါ။
- A
ပေါင်းစပ်အမျိုးအစား
(
O(n log n)
) ပိုကြီးသောဒေတာအတွဲများကို သပ်ရပ်စွာကိုင်တွယ်သော်လည်း အပိုမှတ်ဉာဏ်လိုအပ်သည်။
ရှုပ်ထွေးမှုခွဲခြမ်းစိတ်ဖြာခြင်းသည် အယ်လဂိုရီသမ်များကို နှိုင်းယှဉ်ရန်၊ ဟာ့ဒ်ဝဲဆိုင်ရာ အသေးစိတ်အချက်အလက်များကို ဖယ်ထုတ်ရန် စကြဝဠာဘာသာစကားကို ပံ့ပိုးပေးပါသည်။ ၎င်းသည် ဆော့ဖ်ဝဲလ်များကို အတိုင်းအတာတစ်ခုအထိ ကြိုတင်ခန့်မှန်းရန်နှင့် အရေးကြီးသောစနစ်များတွင် ပိတ်ဆို့မှုများကို ရှောင်ရှားရန် စွမ်းအားမြှင့်ပေးသည်။
Asymptotic အမှတ်အသားများသည် လုပ်ဆောင်ချက်များ၏ ကန့်သတ်ခြင်းအမူအကျင့်များကို ဖော်ပြပြီး ရှုပ်ထွေးမှုအတွက် အတိုကောက်ဖော်ပြသည်။ အဓိကအချက်သုံးချက်ကတော့:
Big O သင်္ကေတသည် algorithm တစ်ခုယူမည့် အများဆုံးအချိန် သို့မဟုတ် နေရာအား သတ်မှတ်သည်။ ဥပမာအားဖြင့်:
-
O(1)
: အဆက်မပြတ်အချိန် (ဥပမာ၊ အညွှန်းအားဖြင့် array ဒြပ်စင်တစ်ခုအား ဝင်ရောက်ခြင်း)။
-
O(n)
: တစ်ပြေးညီအချိန် (ဥပမာ၊ စာရင်းတစ်ခုမှတဆင့် ထပ်လောင်းခြင်း)။
-
O(n)
: လေးပုံတစ်ပုံ အချိန် (ဥပမာ၊ ပူဖောင်းအမျိုးအစားတွင် အစုအဝေးများ)။
စွမ်းဆောင်ရည်မျက်နှာကျက်များကို အာမခံသောကြောင့် Big O သည် အသုံးအများဆုံးမက်ထရစ်ဖြစ်သည်။
အိုမီဂါသည် လိုအပ်သော အနည်းဆုံးအချိန်ကို ဖော်ပြသည်။ ဥပမာအားဖြင့်:
- linear ရှာဖွေမှုတစ်ခုရှိသည်။
(1)
အကယ်၍ ပစ်မှတ်သည် ပထမဒြပ်စင်ဖြစ်သည်။
အကောင်းမြင်သော်လည်း၊ အကောင်းဆုံး-ဖြစ်ရပ်ခွဲခြမ်းစိတ်ဖြာမှုသည် အဆိုးဆုံးစီမံကိန်းအတွက် အချက်အလက်နည်းပါးသည်။
Theta သည် Big O နှင့် Omega တို့ကို ပေါင်းစပ်ထားပြီး အတိအကျ မခံစားရသော အပြုအမူကို ကိုယ်စားပြုသည်။ အကယ်၍ algorithms တစ်ခုသည် အကောင်းဆုံးနှင့် အဆိုးဆုံး ကိစ္စများ အတူတူပင် ဖြစ်သည်။:
-
(n log n)
အမျိုးအစားများ ပျမ်းမျှနှင့် အဆိုးဆုံး အခြေအနေများကို ပေါင်းစည်းရန် အကျုံးဝင်ပါသည်။
ဤမှတ်စုများသည် တိုးတက်မှုနှုန်းကို အာရုံစိုက်ကာ ကိန်းသေများနှင့် နိမ့်ကျသော ဝေါဟာရများကို လွဲမှားစွာ ရှုမြင်ကြသည်။ ဥပမာအားဖြင့်, 2n+3n+ 4 ရိုးရှင်းစေသည်။ O(n) အဘယ်ကြောင့်ဆိုသော် လေးထောင့်ကိန်း သည် ကြီးမားသော အရာကို လွှမ်းမိုးထားသည်။ n .
ရှုပ်ထွေးသောအတန်းများကို နားလည်ခြင်းသည် အယ်လဂိုရီသမ်များကို အရွယ်အစားအလိုက် အမျိုးအစားခွဲရန် ကူညီပေးသည်။ ဤသည်မှာ အမြင့်ဆုံးမှ အနည်းဆုံးအထိ ထိရောက်မှုရှိသော အထက်တန်းအဆင့်တစ်ခုဖြစ်သည်။:
လုပ်ဆောင်ချိန် သို့မဟုတ် မှတ်ဉာဏ်သည် မပြောင်းလဲပါ။
n
ကြီးထွားလာသည်။
-
ဥပမာ
: သော့ဖြင့် hash ဇယားတန်ဖိုးကို ရယူခြင်း။
Runtime သည် လော့ဂရစ်သမ်ဖြင့် ကြီးထွားသည်။
n
.
-
ဥပမာ
: Binary ရှာဖွေမှုသည် ထပ်ကာထပ်ကာတစ်ခုစီတွင် ထည့်သွင်းသည့်နေရာကို တစ်ဝက်ခွဲထားသည်။
Runtime စကေး အချိုးကျဖြင့်
n
.
-
ဥပမာ
: ခွဲခြားမထားသောစာရင်းမှတဆင့် မျဉ်းသားရှာဖွေမှု။
ဝေခွဲမရသော အယ်လဂိုရီသမ်များတွင် အဖြစ်များသည်။
-
ဥပမာ
အမျိုးအစားခွဲခြင်းနှင့် အစုအဖွဲ့ကို ပေါင်းစည်းပါ။
ထပ်ကာထပ်ကာ ပြုလုပ်ခြင်းသည် ပေါက်ကွဲကြီးထွားမှုကို ဦးတည်စေသည်။
-
ဥပမာ
: ပူဖောင်းအမျိုးအစားနှင့် ရွေးချယ်မှုအမျိုးအစား။
အပိုထည့်သွင်းမှုတစ်ခုစီဖြင့် Runtime နှစ်ဆတိုးသည်။
-
ဥပမာ
- အလွတ်ကျက်ခြင်းမရှိဘဲ ထပ်ခါတလဲလဲ Fibonacci တွက်ချက်ခြင်း။
Permutation-based algorithms
-
ဥပမာ
: နယ်လှည့်အရောင်းသမားပြဿနာကို brute-force ဖြင့်ဖြေရှင်းခြင်း။
ကွာခြားချက် O(n log n) နှင့် O(n) မြေကြီးဖြစ်လာသည်။ n= 10 − ယခင်သည် မီလီစက္ကန့်အတွင်း လုပ်ဆောင်နိုင်သော်လည်း နောက်ပိုင်းတွင် ရက်အနည်းငယ်ကြာနိုင်သည်။
ထည့်သွင်းမှုပုံစံများကို အခြေခံ၍ အယ်လဂိုရီသမ်များသည် ကွဲပြားစွာလုပ်ဆောင်သည်။ ကိစ္စအားလုံးကို ခွဲခြမ်းစိတ်ဖြာခြင်းသည် ကြံ့ခိုင်မှုကို အာမခံပါသည်။:
ဒေတာဘေ့စကို မေးမြန်းမှု ပိုမိုကောင်းမွန်အောင်ပြုလုပ်သူသည် hash ပါဝင်ခြင်းအကြား ရွေးချယ်နိုင်သည် ( O(n+m) ) နှင့် nested loop join ( O(nm) ) ဒေတာဖြန့်ဝေမှုအပေါ်အခြေခံသည်။ အဆိုးဆုံးအခြေအနေခွဲခြမ်းစိတ်ဖြာခြင်းသည် ဘေးကင်းရေးအရေးပါသောစနစ်များ (ဥပမာ၊ လေကြောင်းဆော့ဖ်ဝဲ) အတွက် အရေးကြီးသည်
တူညီသောပြဿနာကို မတူညီသော algorithms များဖြင့် ဖြေရှင်းနိုင်သည်။ ဥပမာအားဖြင့်၊ တန်ဖိုးများစာရင်းရှိ ပစ်မှတ်တန်ဖိုးကို ရှာဖွေခြင်းပြဿနာကို linear search၊ binary search သို့မဟုတ် hash table search ကဲ့သို့သော မတူညီသော algorithms များကို အသုံးပြု၍ ဖြေရှင်းနိုင်ပါသည်။
အောက်ပါဇယားသည် စာရင်းတစ်ခုရှိ ပစ်မှတ်တန်ဖိုးကို ရှာဖွေရန်အတွက် ဤ algorithms ၏ အချိန်နှင့် နေရာ ရှုပ်ထွေးမှုများကို နှိုင်းယှဉ်ပါသည်။ n တန်ဖိုးများ
အယ်လဂိုရီသမ်ရွေးချယ်မှုသည် ပြဿနာအရွယ်အစား၊ ထည့်သွင်းမှုလက္ခဏာများနှင့် ရရှိနိုင်သောအရင်းအမြစ်များပေါ်တွင် မူတည်သည်။ ဥပမာအားဖြင့်၊ စာရင်းသည် သေးငယ်ပြီး အမျိုးအစားခွဲမထားပါက၊ linear search သည် အကောင်းဆုံးရွေးချယ်မှုဖြစ်နိုင်သည်။ စာရင်းသည် ကြီးပြီး စီထားလျှင် binary ရှာဖွေခြင်းသည် အကောင်းဆုံးရွေးချယ်မှုဖြစ်နိုင်သည်။ စာရင်းသည် ကြီးမားပြီး အမျိုးအစားခွဲမထားပါက hash table ရှာဖွေမှုသည် အကောင်းဆုံးရွေးချယ်မှုဖြစ်နိုင်သည်။
Amortized analysis သည် လုပ်ငန်းဆောင်ရွက်မှု အပိုင်းတစ်ခုအပေါ် ပျမ်းမျှအချိန်ဖြစ်သည်။
-
ဥပမာ
: ပြည့်သွားသောအခါတွင် ဒိုင်းနမစ် အခင်းအကျင်းများ နှစ်ဆ။ တစ်ယောက်တည်းရှိနေချိန်
တွန်း
လည်ပတ်မှု ကြာနိုင်သည်။
O(n)
အချိန်တန်လျှင် ဖြတ်တောက်ထားသော ကုန်ကျစရိတ် ကျန်ရှိနေပါသည်။
O(1)
.
Algorithms တွေ ကြိုက်တယ်။
Monte Carlo
နှင့်
လာ့စ်ဗီးဂတ်စ်
ထိရောက်မှုအတွက် ကျပန်းအသုံးပြုပါ။
-
ဥပမာ
: Miller-Rabin primality test တွင် ဖြစ်နိုင်ချေရှိသော အာမခံချက်များ ပါသော်လည်း အဆုံးအဖြတ်ပေးသော နည်းလမ်းများထက် ပိုမြန်ပါသည်။
အချို့သောပြဿနာများ (ဥပမာ- Boolean ကျေနပ်မှု) NP-ပြီးပါပြီ။ အဓိပ္ပာယ်မှာ လူသိများသော ပေါင်းကူး-အချိန်ဖြေရှင်းချက် မရှိပါ။ လျှော့ချခြင်းဖြင့် NP-ပြီးပြည့်စုံမှုကို သက်သေပြခြင်းသည် ကွန်ပြူတာ မာကျောမှုကို အမျိုးအစားခွဲခြားရန် ကူညီပေးသည်။
တစ်ခု O(n) အစုလိုက်အပြုံလိုက် အယ်လဂိုရီသမ်သည် ကြီးမားသောဒေတာအတွဲများအတွက် ပိတ်ဆို့မှုဖြစ်လာနိုင်ပြီး kd သစ်ပင်များကဲ့သို့ အနီးစပ်ဆုံးနည်းလမ်းများဆီသို့ ပြောင်းသွားသည် ( O(n log n) ).
အများသူငှာသော့စနစ်များ၏ မာကျောမှုကို အားကိုးသည်။ O(2) တိုက်ခိုက်မှုများကို တွန်းလှန်ရန် ပြဿနာများ (ဥပမာ၊ ကိန်းပြည့် ကိန်းဂဏန်း သတ်မှတ်ခြင်း)။
အချိန်နှင့်တပြေးညီ ပုံဖေါ်ခြင်းအင်ဂျင်များကို ဦးစားပေးသည်။ O(1) 60+ FPS ကို ထိန်းသိမ်းထားရန် ရူပဗေဒဆိုင်ရာ သရုပ်ဖော်မှုများအတွက် အယ်လဂိုရီသမ်များ။
အပေးအယူကိစ္စ:
-
အချိန်နှင့် အာကာသ
: hash မြေပုံများကိုသုံးပါ (
O(1)
ရှာဖွေမှု) မှတ်ဉာဏ်၏ကုန်ကျစရိတ်။
-
ရိုးရှင်းမှုနှင့် အကောင်းဆုံးဖြစ်အောင်
: ထည့်သွင်းမှုအမျိုးအစား (
O(n)
) သေးငယ်ပြီး အမျိုးအစားခွဲထားသော ဒေတာအတွဲများအတွက် ပိုကောင်းနိုင်သည်။
ထပ်ခါတလဲလဲ အယ်လဂိုရီသမ်များအတွက်၊ ထပ်တလဲလဲဆက်ဆံရေး မော်ဒယ် runtime။ ဥပမာ၊ အမျိုးအစားများ ထပ်တလဲလဲ ပေါင်းစပ်ပါ။:
[ T(n) = 2T(n/2) + O(n)] မှ ဖြေရှင်းသည်။
O(n log n)
မှတဆင့်
မာစတာသီအိုရီ
.
Empirical Testing သည် သီအိုရီပိုင်းခြားစိတ်ဖြာမှုကို အားဖြည့်ပေးသည်။ ပရိုဖိုင်းကိရိယာများ (ဥပမာ၊ Valgrind၊ perf) သည် လက်တွေ့ကမ္ဘာ၏ ပိတ်ဆို့မှုများကို ဖော်ပြသည်။
စပါးအုံး
def linear_sum(arr):
စုစုပေါင်း = 0
arr တွင် ဂဏန်းအတွက်:
စုစုပေါင်း += ဂဏန်း
စုစုပေါင်းပြန်လာ
def quadratic_sum(arr):
စုစုပေါင်း = 0
ငါ arr အတွက်:
j in arr အတွက်:
စုစုပေါင်း += i*j
စုစုပေါင်းပြန်လာ
နေစဉ် O(n) abstracts ကိန်းသေများကို ဖယ်ထုတ်ခြင်း, a 100n algorithm သည် a ထက် နှေးပေမည်။ 0.01n လက်တွေ့လုပ်ဆောင်ရန် algorithm n .
တစ်ခု O(n log n) algorithm သည် လုပ်ဆောင်မှု အားနည်းနိုင်သည်။ O(n) အတွက် n= 10 အပေါ်ယံကြောင့်။
အလွတ်ကျက်ထားသော Fibonacci လုပ်ဆောင်ချက် ( O(n) space) သည် ထပ်ခါတလဲလဲ ဗားရှင်းနှင့်မတူဘဲ ကြီးမားသော သွင်းအားစုများပေါ်တွင် ပျက်စီးသွားနိုင်သည်။ O(1) အာကာသ)။
ကိုယ်ပိုင်ဟန်ချက်ညီသော BST ( O(log n) ရှာဖွေမှု) သည် ပုံမှန် BST ( O(n) အဆိုးဆုံး) မယုံကြည်ရတဲ့ဒေတာအတွက်။
အယ်လဂိုရီသမ် ရှုပ်ထွေးမှု ခွဲခြမ်းစိတ်ဖြာမှုသည် တွက်ချက်မှုဆိုင်ရာ ထိရောက်မှု၏ ကျယ်ပြောလှသော အခင်းအကျင်းများတစ်လျှောက် တီထွင်သူများအား သံလိုက်အိမ်မြှောင်ကို လမ်းညွှန်ပေးသည်။ MTSC7196 ကျောင်းသားများအတွက်၊ ဤစည်းကမ်းကို ကျွမ်းကျင်ပါက သီအိုရီဆိုင်ရာ အသိပညာနှင့် လက်တွေ့ကျွမ်းကျင်မှုများကို ပေါင်းကူးပေးသည်။ အချိန်နှင့် အာကာသ လိုအပ်ချက်များကို ခွဲခြမ်းစိတ်ဖြာခြင်း၊ မခံစားရသော ဘောင်များကို နှိုင်းယှဉ်ခြင်းနှင့် လက်တွေ့ကမ္ဘာ အပေးအယူများကို လမ်းကြောင်းရှာခြင်းဖြင့်၊ developer များသည် သပ်ရပ်စွာ အတိုင်းအတာဖြင့် စိတ်ချယုံကြည်စွာ လုပ်ဆောင်နိုင်သော စနစ်များကို ဖန်တီးနိုင်သည်။
ဒေတာမောင်းနှင်သော ဆန်းသစ်တီထွင်မှုဖြင့် သတ်မှတ်ထားသော ခေတ်တစ်ခုတွင် တစ်ခုနှင့်တစ်ခုကြားပိုင်းခြားနိုင်စွမ်း၊ O(n log n) နှင့် တစ်ခု O(n) ဖြေရှင်းချက်သည် ပညာရပ်ဆိုင်ရာ ဗျူဟာမြောက် လိုအပ်ချက်တစ်ခုမျှသာ မဟုတ်ပါ။ သင်၏လေ့လာမှုများ တိုးတက်လာသည်နှင့်အမျှ၊ မှတ်သားထားပါ- ရှုပ်ထွေးမှုခွဲခြမ်းစိတ်ဖြာမှုသည် နံပါတ်များနှင့် သင်္ကေတများအကြောင်းမျှသာမဟုတ်ပါ။ ၎င်းသည် တွက်ချက်မှု၏ နှလုံးခုန်နှုန်းကို နားလည်ခြင်း ဖြစ်သည်။
2019 ခုနှစ်မှစ. ဂွမ်ကျိုးကုန်ထုတ်လုပ်မှုအခြေစိုက်စခန်း, ကျွန်ုပ်တို့သည်လက်ဝတ်ရတနာလုပ်ငန်းနှင့်ရောင်းချခြင်းဒီဇိုင်း, ထုတ်လုပ်မှုနှင့်ရောင်းချခြင်းနှင့်ရောင်းချခြင်းဖြစ်သည်။
+86-19924726359/+86-13431083798
ကြမ်းပြင် 13, Gome Smart City ၏အနောက်မျှော်စင်, 33 Juxin Street, Haizhu ခရိုင်, ကွမ်ကျိုးခရိုင်။