ဘာလို. Algorithm တွေ Data Structure တွေကိုလေ့လာဖို.လိုတာလဲ ဘယ်နေရာတွေမှာသုံးကြတာလဲပေါ့။
ဒါကတော့ အပြင်က လေ့လာတဲ့သူတွေအတွက်ရည်ရွယ်တာပါ။
Algorithm ဆိုတာ အကြမ်းပြောရရင် သချာင်္နည်းအရ problem တခုကို အဆင့်ဆင့်ဖြေရှင်းတာလို. ဆိုရမှာပါ။ တိကျတယ် Algorithm မှာပေးထားတဲ့အတိုင်း အဆင့်ဆင့်လုပ်သွားရင် အဖြေ ထွက်လာမယ်။ အရှင်းဆုံး algorithm ကိုဥပမာ ပေးရရင် ဂဏန်းတလုံးကို စုံလား မလား စစ်မယ်ပေါ့။
ဒါဆိုဒီလို အဆင့်တွေပါ ပါလိမ့်မယ်။
၁ Input အနေနဲ. ယူထားတဲ့ ဂဏန်းကို ၂ ဖြင့်စားပါ။
၂ အကြွင်းသည် သုညဖြစ်ပါက စုံဟု ယူဆပါ မဟုတ်ပါက မ ဟုယူဆပါ
ဒီလို ရေးထားတာမျိုးပေါ့ တကယ်တမ်းတော့ မြန်မာလိုတော့ဘယ်ဟုတ်မလဲ English နဲ. mathematial notation သုံးမှာပေါ့။
ပြောချင်တာက algorithm ဆိုတာ အဆင့်ဆင့် တဆင့်ချင်းလုပ်သွားရင် ကိုယ်လိုချင်တဲ့ solution ကိုရမယ်လို.ပြောတာ။ ခုနက solutionက ဘယ်လို solution မျိုးလဲ။
အသုံးအများဆုံး algorithm တွေဆို searching, sorting ပေါ့။ မြင်သာအောင်ပြောရရင် phone contact list မှာ နာမည်တွေကို စီထားတယ်။ လူတွေက ထဲ့ချင်ရာထဲ့တာ ဒါကို sotring algorithm ကိုသုံးပြီးတော့ စီထားတာ။ နောက်ပြန်ရှာတဲ့အခါကျတော့လဲ searching ကိုသုံးပြီးတော့ ရှာတာမျိုးပေါ့။
နောက် zip ချုံ.တယ်ဆိုတာမျိုး winzip တို.ဘာတို.သုံးဖူးပါလိမ့်မယ် ။ဒါမျိုးဆိုလဲ compression algorithm လိုမျိုးကိုသုံးပြီး ချုံ.သွားတာပါ။ ဒါဆို algorithm တွေသုံးလိုက်တော့ ဘာအကျိုးထူးလဲပေ့ါ။
၁ ကိုယ်လိုချင်တဲ့ အဖြေကို တွက်ထုတ်လို.ရမယ်။ ဒါကတော့ ဥပမာ sorting စီချင်တာဆိုရင် မစီရသေးတာပေးလိုက်ရင်စီပြီးသားထွက်လာမယ်။
၂ နောက်တခုက algorithm ရွေးတဲ့အပေါ်မူတည်ပြီး time, space ကွာသွားမယ်။
ဥပမာ ကိုရေးထားတဲ့ code သည် sorting စီတဲ့ code ပေါ့ ဒါဆိုရင် sorting စီတဲ့နေရာမှာ အမြန်ဆုံး algorithm ကိုသုံးရင် ကို. program သည် ပိုမြန်မယ်။ နောက်တခုက space ပေါ့။ ခုနကပြောတဲ့ comperssio n algorithm လိုမျိုးဆိုရင် မြန်ချင်တာမဟုတ်ပဲနဲ. storage ကိုသက်သာစေချင်တာမျိုးပေါ့။
ဘာလို.မြန်သလဲပေါ့။ လုပ်တဲ့နည်း က မြန်အောင်လုပ်လို. လို.ဖြေရမယ်။
ဥပမာ binary search နဲ. ကြည့်ရအောင်။ Binary search ဆိုတာ sorting စီပြီးသား array ဒါမှမဟုတ် list ထဲကနေ element တခုခုကို ရှာချင်တာ ရှိမရှိသိချင်တာပေါ့။ သူ.ကိုသုံးမယ်ဆိုရင်တော့ ပေးထားတဲ့ list သည် sorted လုပ်ပြီးသားဖြစ်ရမယ်။ ဥပမာ အောက်က list ပေါ့ သူ.ထဲမှာ 40 ပါလားလို.စစ်ချင်တယ်။
[1 , 4, 11, 16, 18, 20, 22, 26, 30, 40 ]
ဒါဆို binary search ကိုမသုံးပဲနဲ.စစ်မယ်ဆိုရင် ပထမဆုံး တခုချင်းကနေ လိုက်တိုက်ရမယ်။ ဒါဆို 40 သည် နောက်ဆုံးမှ ရှိတဲ့အတွက် ၁၀ ခေါက် တိုက်ပြီးမှတွေ.မယ်။ data အရေအတွက် n သည် ၁၀ ဖြစ်တဲ့အတွက် သူ.ကို time complexity တွက်ရင် ကြာချိန် O(N) လို.ပြောတယ်။ Worst case complexity ပေါ့။ မတွေ.ရင်လဲ O(N) ပေါ့။ ထားပါတော့ မရှိတဲ့ element ဥပမာ 23 ရှာမယ်ဆိုရင်တောင် အနည်းဆုံး ၁၀ ခေါက် တိုက်ရမယ်။ ဒါမျိုးကို linear search လို.ခေါ်တယ် ဆိုချင်တာက တရွတ်တိုက် တခုချင်းတိုက်သွားတာမျိုးခေါ်တာ။
Binary search သုံးမယ်ဆိုရင် ပထမဆုံး အလယ် အမှတ်ကိုယူလိုက်ရတယ်။ဒါသည် algorithm အဆင့်ပဲ 30 ကိုရှာမယ်စိုပါစို.
first က 1, last က 10 ပေါ့ middle ယူတော့ ( first+ last )/2 ဆိုရင် 5 ရမယ်။
ဒီလိုပိုင်းလိုက်တာပေါ့ (ဒီနေရာမှာ programming က array 0 ကနေ စတယ်ဆိုတာ ခနမေ့ထားတာပေါ့)
[1 , 4, 11, 16, 18, ((20)), 22, 26, 30, 40 ]
အလည်မှတ် 5 ခုမြောက် နေရာမှာ ကျတဲ့ ကောင်သည် 20 ရှာချင်တာက 30 , 20 နဲ. 30 မတူဘူး။ အိုကေ ဒါဆို binary search က စဉ်းစားတယ်။ 20 ရဲ. ဘယ်ဘက်သည် 20 ထက် ငယ်တဲ့ကောင်တွေ (စီထားတာကိုး) ခုလောလောဆယ် အလယ်မှာရှိတဲ့ 20 သည် ကိုရှာချင်တဲ့ကောင် ၃၀ ထက် ငယ်တယ်။ အဲ့တော့ ၃၀ သည် ညာဘက်မှာပဲရှိရမယ်လို.တွေးတယ်။
အဲ့တော့ first ကို ခုနက mid+1 ကိုရွေ.တယ်
first= mid +1,
first = 6
last က မပြောင်းဘူး
[1 , 4, 11, 16, 18, 20, 22, 26, 30, 40 ]
[22, 26, 30, 40 ]
ဒါဆို middle သည် first+last /2
(6+10)/2 သည် 8
ဒါဆို ၈ နေရာမြောက်ကကောင်သည် ၂၆
ဒါဆို ခုနက လိုပြန်စဉ်းစား
၂၆ သည် ၃၀ ထက် ငယ်နေတယ် ဒါဆို ညာဘက်မှာရှိရမယ် first ကို ညာဘက်ရွေ.
first= mid +1,8+1
first = 9
last = 10
middle = (9+10)/2 = 9
ဒါဆိုရင် 9 နေရာမြောက်မှာ 30 ကိုတွေပြီ အဲ့မှာတင်ရပ်လိုက်ပြီ။ တကယ်လို.မတွေဘူး ဆက်ရှာရင်လဲ နောက်တဆင့်ဆို ပြီးသွားတော့ အဲ့မှာတင်ရပ်ပြီပေ့ါ။
ဒါဆို ခု binary search လုပ်သွားတာသည် အားလုံးပေါင်းမှ ၃ ဆင့်ပဲကြာတယ် ဒီအခြေအနေပေါ့ ဒါဆို ခုနက linear search နဲ.ဆို ၉ ခါမြောက်တိုက်မှတွေ.မယ်။
ဒီလောက်ဆို ဘာလို. သုံးတာလဲ သဘောပေါက်လောက်ပါပြီ။
နောက် data structure ဆိုတာက ခုနက array, list တွေသည် data structure ပဲ algorithm တွေနဲ.တွဲသုံးရတယ်။ ဆိုင်ရာ algorithm ဆိုင်ရာ data structure နဲ.မှ ပိုမြန်တာ ပိုအချိန်ကုန် နေရာကုန်သက်သာတာမို.လို.။
Original link=>(https://m.facebook.com/story.php?story_fbid=pfbid02MVzd4ET7A2H3dx1uybeq89VXSjjH678PfR8vAfdAAMxSSTVUuGY68Le7pm3mFYx1l&id=1819241055&mibextid=Nif5oz)