ယူနီကုဒ်နှင့် Searching

ယူနီကုဒ်မှာက တိကျတဲ့ စာလုံးစီပုံရှိတယ်။ စာလုံးစီပုံအမျိုးမျိုးကွဲပြီး data အမျိုးမျိုးကွဲလွဲနေတဲ့ ပြဿနာကိုတော့ ကျော်လွှားနိုင်သွားပါပြီတဲ့။ ဒါပဲလားဗျ။ ဟုတ်တယ် ဒါပဲဗျ။ အဲဒါကကို ကွန်ပျူတာစနစ်မှာ အဓိကကျနေတဲ့ အချက်ဆိုတာတော့ ဘယ်သူမှ မငြင်းနိုင်ပါဘူးဗျာ။

ကဲ အဲဒီ “ဒါပဲ” ဆိုတာကိုပဲ အသေးစိတ်ချဲ့ကြည့်ကြမယ်ဗျာ။ စာတော့ နည်းနည်းရှည်တယ်ဗျာ။ သည်းခံနိုင်ရင်တော့ ဆက်ပြီး ဖတ်ပေးကြပါလို့ တောင်းဆိုပါတယ်ဗျာ။

ကျွန်တော်တို့ စဉ်းစားကြည့်ကြမယ်ဗျာ။ စာလုံးစီပုံတိကျပြီး အမျိုးမျိုးကွဲတဲ့ ပြဿနာမရှိတာကြောင့် Searching တွေမှာ တိကျတဲ့ result တွေကို ရပြီပေါ့ဗျာ။ နောက်ပြီး ကျွန်တော်တို့ searching တခုရဲ့ speed နဲ့ system resource အသုံးပြုမှုကို ကြည့်ကြမယ်ဗျာ။

အင်တာနက်ပေါ်မှာ သိချင်တာ တခုခု ရှိလာလို့ ရှာတိုင်း Google Search ကို လူတိုင်းသုံးဖူးပါလိမ့်မယ်။ သူလဲ ဒီ Searching ကို နိုင်နင်းခဲ့တာ ကောင်းမွန်တဲ့ data collection ရှိခဲ့လို့ဆိုတာ ဘယ်သူမှ မငြင်းနိုင်ကြပါဘူး။

Searching နဲ့ပတ်သက်ပြီး ကျွန်တော်သိတာ နည်းနည်း ပြောပြချင်တယ်ဗျာ။ ကျွန်တော်တို့ သင်ခဲ့ရဖူးတာတော့ Linear Search, Binary Search ဆိုပြီးတော့ နဲနဲ သင်ခဲ့ရတယ်ဗျာ။

Linear Search ဆိုတာက အတန်းလိုက်ရှာဖွေမှု လို့ပြောရမလားဗျ။ သူရဲ့ အလုပ်လုပ်ပုံက ဥပမာဗျာ-

တန်းဖိုး a d g h b e c f i j
အခန်းနံပါတ် 1 2 3 4 5 6 7 8 9 10

အပေါ်ဇယားအတိုင်း ဂဏန်းတန်ဖိုးတွေသိမ်းထားတဲ့ Array အတွဲလေးရှိမယ်ပေါ့ဗျာ။ အဲဒီထဲက ကျွန်တော်တို့ (i) ဆိုတဲ့တန်ဖိုး တခုကို ရှာချင်တယ်ဆိုရင် Linear Search ကဘယ်လိုလုပ်သလဲဆိုတော့ ရှေ့ဆုံးကနေ့ တခုချင်းတိုက်စစ်တယ်ပေါ့။ အခန်းနံပါတ် (1) က တန်းဖိုးကို ကြည့်တယ် (a)၊ ရှာချင်တာက (i) မတူဘူး။ နောက်တခန်းသွားတယ်။ အခန်းနံပါတ် (d) က (i) မတူသေးဘူး။ အဲလိုနဲ့ တစ်ခန်းချင်း တစ်ခန်းချင်း တိုက် စစ်ကြတယ်ပေါ့ဗျာ။ နောက်ဆုံး အခန်း နံပါတ် (9) ကို ရောက်မှ တွေ့ပြီ။ (i) ကို အခန်းနံပါတ် (9) မှာ ရှာတွေ့ပါပြီဆိုပြီး အကြောင်း ပြန်လိုက်တယ်ပေါ့ဗျာ။

အဲဒီမှာ ကျွန်တော်တို့ သူ အလုပ်လုပ်သွားတဲ့ကြာချိန်ကို တွက်ကြည့်မယ်ဗျာ။ အခန်း တခန်းက တန်ဖိုးကို တိုက်စစ်ပြီး နောက်တစ်ခန်းကို သွားဖို့ အချိန် ၁ စက္ကန့် ကြာတယ်ဆိုရင် အခုဏက ရှာဖွေမှုမှာ အချိန် ၉ စက္ကန့်ကြာမယ်ဗျာ။
Linear Search = 9 seconds.

နောက် Binary Search ဗျာ။ သူက Linear Search ထက် ပိုကောင်းတယ် ပိုမြန်တယ် ပြောလို့ရနိုင်တယ်။ ဒါပေမဲ့ သူက ရှာမဲ့ data တွေက အက္ခရာစဉ်(Sorting) လုပ်ထားဖို့လိုမယ်ဗျ။ ကြီးစဉ်ငယ်လိုက်ပဲဖြစ်ဖြစ်၊ ငယ်စဉ်ကြီးလိုက်ပဲဖြစ်ဖြစ် စဉ်ထားဖို့ လိုအပ်တယ်ဗျ။ အပေါ်က တန်ဖိုးတွေကိုပဲ အက္ခရာစဉ်လိုက်မယ်ဗျာ။

တန်ဖိုး a b c d e f g h i j
အခန်း နံပါတ် 1 2 3 4 5 6 7 8 9 10

အဲဒီထဲက ကျွန်တော်တို့ (i)ဆိုတာကို Binary Search ကို သုံးပြီးရှာကြည့်ကြမယ်။ Binary Search ရဲ့ သဘောတရားက အခန်းတွေကို တဝက်ဝက်ပြီး ရှာတာပေါ့ဗျာ။ အဲဒါကြောင့်လဲ အက္ခရာစဉ်(Sorting)လိုအပ်တာပေါ့။ အခုတော့ ငယ်စဉ်ကြီးလိုက်(ascending order) အတိုင်းစီထားတယ်။ အခန်း ၁၀ ခန်းရှိတယ်။ သူ ၅ ခန်းမြောက်က နေစရှာတယ်ဗျ။ အစ အခန်း(၁) ကနေ ရှာတာမဟုတ်ဘူးဗျ။ အခန်း(၅) က တန်ဖိုး(e)၊ ရှာချင်တာက (i) မတူဘူးဗျ။ အဲဒီတော့ သူဘယ်ဘက်ကို ဆက်ပြီးရှာရမလဲ စဉ်းစားတယ်။ ကျွန်တော်တို့ sorting လုပ် အက္ခရာစဉ်ထားတာ ငယ်ရာကနေ ကြီးတာကိုနော်။ ရှာချင်တဲ့ တန်ဖိုးက (i) ၊ လက်ရှိ အခန်း(၅)မှာရှိတဲ့ တန်ဖိုးက (e) ဆိုတော့ သူ့ရဲ့ ညာဘက်ကို ဆက်ပြီးရှာသွားမှ သူလိုချင်တဲ့ (i) ဆိုတာ တွေ့နိုင်တယ်လို့ စဉ်းစားတယ်ဗျာ။ အဲဒါကြောင့် ဘယ်ဘက်ကို မသွားတော့ပဲ ညာဘက်ကိုပဲ တခန်းချင်းရှာသွားတော့တယ်။ အခန်း(၆) တန်းဖိုးက (f)။ ရှာချင်တာက (i) မတူသေးဘူး ညာဘက်တခန်းထပ်ရွှေ့။ အဲလိုနဲ့ အခန်း(၉)မှာ (i) ဆိုတာကို ရှာတွေ့ပြီး ပြန်ပြီး အကြောင်းပြန်လိုက်တယ်ဗျာ။ အဲဒီမှာ သူ့ရဲ့ကြာချိန်ကို တွက်ကြည့်ကြမယ်။ တစ်ခန်းရှာလို့ တစ်စက္ကန့် ကြာမယ်ဆိုရင် ၅ခန်းပဲ ရှာရတော့ ၅ စက္ကန့်ပဲ ကြာတော့မယ်ပေါ့။

Binary Search = 5 seconds

ဒီ၂ခုက Searching အတွက် အခြေခံ ၂ ခုအနေနဲ့ အတန်းငယ်တွေကတည်းက သင်ခဲ့ရတယ်ဗျ။  အဲဒီမှာ သူတို့ရဲ့ ရှာဖွေနည်းစနစ်တွေ ကောင်းမွန်မှုတွေပေါ်မှာ မူတည်ပြီး ရှာဖွေမှု ဘယ်လောက်မြန်လဲ ဘယ်လောက် တိကျတဲ့ အချက်အလက်တွေကို ပေးနိုင်မလဲဆိုတာဖြစ်လာပြီးပေါ့ဗျာ။
Google မှာ  “မြန်မာနိုင်ငံ” လို့ရိုက်ရှာကြည့်ပါ။ website ပေါင်း ၁၂၀၀၀၀ (တစ်သိန်းနှစ်သောင်း)ကျော်ကို စက္ကန့်ဝက်လောက် အချိန် လေးအတွင်းမှာ ဘယ်လို ရှာပေးလိုက်သလဲ စဉ်းစားသာကြည့်တော့ဗျာ။
googleSearch_result.png

အခုဏ Binary Search ကိုကြည့်ချင်းအားဖြင့် အက္ခရာစီနိုင်ခြင်း မစီနိုင်ခြင်းဟာ ဘယ်လောက် ကွာခြားလဲဆိုတာ သဘောပေါက်လာတယ်။

မြန်မာစာမှာ အက္ခရာစီနိုင်ဖို့ ဆိုတာကလည်း developer သမားတွေအနေနဲ့ ကျားမြီးသာ ပြေးဆွဲချင် စိတ်ပေါက်လိမ့်မယ်ဗျာ။ အဲဒါဆို မလုပ်ကြတော့ဘူးလား အက္ခရာစီလို့ မရကြတော့ဘူးလား။ စိတ်မပူကြပါနဲ့ ရနေပါပြီ။ လုပ်ပြီးနေကြပါပြီ။ မြန်မာစာက အင်္ဂလိပ်စာမှာလို A ကနေ Z ထိကွာလို့ လွယ်လွယ်စဉ်လို့မရဘူးဗျ။ ဗျည်းတွေစဉ်တယ်။ ဗျည်းတူရင် ဗျည်းတွဲတွေစဉ်တယ်။ ဗျည်းတွဲတွေပါတူရင် သရတွေနဲ့ ထပ်စဉ်တယ်။ အသေးစိတ်တော့ မသိဘူးဗျာ။ ပထမနှစ်မှာတော့ သင်ခဲ့ရတယ်။ မြန်မာနိုင်ငံ ကွန်ပျူတာတက္ကသိုလ်မှာ ပထမနှစ်က ငါတို့ ဘာလို့ မြန်မာစာသင်ခဲ့ရတာလဲ။ ကွန်ပျူတာသင်တာ မြန်မာစာနဲ့ဘာဆိုင်လဲဆိုပြီး အပြစ်တင်ခဲ့ဖူးတယ်ဗျာ။ ဆရာဆရာမတွေကို ဒီကနေပဲ တောင်းပန်ပါတယ်။ ကျွန်တောသိပါပြီ။

ယူနီကုဒ်ဆိုတာကလဲ အက္ခရာစဉ်ဖို့ ရှာဖွေဖို့ဆိုတဲ့နေရာမှာ အဆင်ပြေအာင် အဓိက စဉ်းစားထားရတာပေါ့ဗျာ။ မြန်မာစာယူနီကုဒ်မှာ ဘာလို့ ဗျည်းက ရှေ့ဆုံးက ရောက်ပြီး သဝေထိုးနောက်က ရောက်နေရလဲ။ ဒီမေးခွန်းကို လူတိုင်းစသုံးသုံးခြင်းမှာ မေးကြတယ်။ သင်ပုန်းကြီးနဲ့မကိုက်ဘူးပေါ့။ သမိုင်းနဲ့ မပြောတော့ပါဘူး။ မြန်မာယူနီကုဒ်က ကျွန်တော်တို့ သင်ပုန်းကြီးနဲ့ မကိုက်ပါဘူး။ ဟုတ်ပါတယ်။ တမင်လုပ်ထားတာပါ။ အဲလို ထင်ပါတယ်။ အရင်စာစီ သိမ်းဆည်း (encoding) စနစ်က Visual Order အမြင်အတိုင်းစီတာ။ “ကြောင်း” (ေ + ြ+ က + ာ + င +် +း) အဲလို စီခဲ့တာ။ အခု “ကြောင်း”က ယူနီကုဒ်မှာ (က + ြ + ေ + ာ + င + ် + း) လို့ စီတယ်ဗျာ။ logical order အတိုင်းစီတယ်တဲ့။ ကျွန်တော် Logical ဆိုတဲ့ အဓိပ္ပာယ်ကို နားမလည်ပေမဲ့ ဘာကို ဆိုလိုလဲ သဘောပေါက်တယ်ဗျာ။   ဗျည်းတွဲဆိုတဲ့ အသုံးအနှုံးကိုလဲ ယူနီကုဒ်ကို လေ့လာမှ ရင်းနှီးတာဗျာ။ (ျ၊ြ၊ ွ၊ ှ ) ကို ပြောတာတဲ့။

ဘာလို့ အဲလို စီတာလဲ။

ဟုတ်ကဲ့ ကျွန်တော် စဉ်းစားမိသလောက်ကို ပြောပြမယ်ဗျာ။

ဟုတ်ပြီ Visual order အမြင်အတိုင်းစီထားရင် “ကြောင်း”ဆိုတဲ့ စကားလုံးက (ေ + ြ+ က + ာ + င +် +း) လို ရိုက်မယ်။ အက္ခရာစဉ်ရင် ကျွန်တော်အခုဏက ပြောတဲ့အတိုင်း မြန်မာစာမှာ ဗျည်းကနေစပြီးကြည့်ရမယ်ဗျာ။ ဗျည်းဘယ်နားမှာ ရှိလဲဗျ။ ဟုတ်ကဲ့ ၃လုံးမြောက်မှာ ရှိပါတယ်။ ဗျည်းတလုံးမတွေ့မချင်း Sorting မစီရသေးဘူး ဗျည်းက အရင် ရှာနေရပြီ။  အက္ခရာ တစ်လုံးရှာရင် တစ်စက္ကန့် ကြာတယ်ဆိုရင် ဗျာ အက္ခရာ မစီရသေးဘူး (၃)စက္ကန့်က အချိန်ကုန်သွားပြီ။ ထားပါ။ ဗျည်းတွေ့ပြီ ထားပါ။ နောက် ဗျည်းတွဲဗျ( ျ ၊ ြ ၊ ွ ၊ ှ )။ ဟ လုပ်ကြပါဉီး ဗျည်းတွဲတဲ့။ ဗျည်းရှ့မှာလား ဗျည်းနောက်မှာလား။ ဘယ်မှာ ရှိတာလဲ “ကြောင်း”မှာ ဗျည်းရဲ့ ရှေ့မှာ၊ “ကျောင်း”မှာ ဗျည်းရဲ့ နောက်မှာ။ ရှုပ်နေတာပဲ။ အဲဒီမှာ အချိန် ၃စက္ကန့်လောက်ကုန်သွားပြီ။ ထားပါဗျာ မည်သို့မည်ပုံလုပ်လိုက်သည်မသိ ဗျည်းတွဲဆိုတာ တွေ့ပါပြီ။ ဟုတ်ကဲ့ နောက်တော့ သရ။ ရူးချင်တာပဲဗျာ။ နောက်မှာက “အာ”ဆိုတဲ့ (ာ)သရရှိတယ်။ ရှေ့မှာက အေ(ေ) သရရှိတယ်။ ကယ်ကြပါဦးလို့သာ ပြောလိုက်ချင်တယ်။ ကွန်ပျူတာ မပြောနဲ့ ကျွန်တော်လိုက်စဉ်းစားရင်း ခေါင်းမွှေးဖြူဖို့ မပြောနဲ့ တပင်မှကျန်မှာ မဟုတ်ဘူး။ ကဲပါဗျာ လျော့လျော့ပေါ့ပေါ့ စက္ကန့်  ၁၀ စက္ကန့်လောက် ဒီအက္ခရာကို သိဖို့ကြိုးစားလိုက်ရတယ်။ နောက် အက္ခရာတခုနဲ့ တိုက်စစ်ရဉီးမှာနော်။ “လျှောက်”။ တော်ပြီ ရပ်လိုက်တော့။ မစဉ်းစားတော့ဘူး။ အဲဒါ Visual Order အတိုင်း ရိုက်ခဲ့တဲ့ လက်နှိပ်စက် စာရိုက်စနစ်ပေါ့ဗျာ။

အခု ယူနီကုဒ်က သိမ်းဆည်းတဲ့ Logical Order တဲ့။

“ကြောင်း”ကို ရဖို့ (က + ြ + ေ + ာ + င + ် + း) လို့ရိုက်တယ်။ ဟုတ်ကဲ့ အက္ခရာစီမယ်။ ဗျည်းက စကြည့်တယ်။ ရှေ့ဆုံးမှာဗျ ဗျည်းက ရှာမနေနဲ့။ နောက် ဗျည်းတွဲဘယ်မှာလဲဗျ။ ရှာစရာမလိုဘူး။ ဗျည်းနောက်မှာ ဗျည်းတွဲရှိတယ်။ မရှိရင် ဗျည်းတွဲမပါဘူး။ ဗျည်းရှေ့လဲ သွားကြည့်မနေနဲ့။ နောက်တော့ သရ။ ဟော အစီအစဉ်လိုက်ဗျာ။ အေ(ေ) သရ၊ အော(ာ)သရ။ နောက်မှာ အသတ်။

ကဲဘယ်လောက် ရိုးရှင်းစွာ လုပ်ဆောင်ခဲ့ရလဲ။ သန်းခေါင်းစာရင်း လူ သန်း ၆၀ နီးပါးရှိတာ အဲဒါတာ Visual Order အတိုင်းရိုက်လိုက်လို့ကတော့ အောင်မလေး ကမ္ဘာမှာ ရှိတဲ့ Mainframe ကွန်ပျူတာတွေ အကုန် မြန်မာနိင်ငံ သယ်လာရမယ်။ အက္ခရာစီခြင်း(Sorting) မရှိရင်၊ ရှာဖွေခြင်း(Searching) ဆိုတာ မလွယ်ကူနိုင်ပါဘူး။

ဒီလောက်ပါပဲဗျာ။ သင်ပုန်းကြီး လက်ကိုင်ထားပြီး ယူနီကုဒ်ကို အပြစ်ပြောချင်သူတွေကော၊ ဟုတ်မှ ဟုတ်ပါ့မလားလို့ သံသယရှိနေတဲ့ ကျွန်တော်တို့ ပရိတ်သတ်တွေအားလုံးကော နားလည်နိုင်ပါစေဗျာ။ နားလည်နိုင်ကြပါစေဗျာ။

လူတိုင်း နည်းပညာပစ္စည်းတွေနဲ့ မကင်းနိုင်သ၍ ယူနီကုဒ်ဆိုတာ Developer, Programmer, Designer တွေအပြင် သာမာန် အသုံးပြုသူ၊ ကျောင်းသား၊ ဆရာ အားလုံးအားလုံးနဲ့ သက်ဆိုင်ပါတယ်။ ငါကတော့ ဖတ်ရုံပဲဖတ်တာ ဘာမှ သိပ်သုံးတာမဟုတ်ဘူးလို့ ပြောကြမဲ့သူတွေ သူများပြောင်းမှ ပြောင်းမယ်ဆိုတဲ့ သူတွေ၊ သူတို့ မြင်တွေ့နေ့သမျှ အင်တာနက်ပေါ်က အရာတိုင်းဟာ ယူနီကုဒ်နဲ့  ကင်းနိုင်တဲ့အချက် မရှိပါဘူးလို့ သာ ပြောပြချင်တယ်ဗျာ။

Leave a Reply