Unleashing the Power of Data Structures and Algorithms

Purevsuren Adiyasuren
4 min readJun 26, 2023

--

Энэхүү нийтлэлээр Computer Science (Компьютерын шинжлэх ухаан) эсвэл түүнтэй холбогдох салбарт ажиллаж, суралцаж байгаа хүмүүс яагаад өгөгдлийн бүтэц ба алгоритм (DSA)-ийг сурах ёстой талаар тайлбарлана. Харин цаашдын бичвэрүүдээр тус шаардлагатай ойлголтуудыг сэдэв сэдвээр нь задлан салгаж сурах болно. Тэгэхээр эхлээд DSA-ийн тодорхойлолтыг дурдаад үндсэн асуулт руу шилжье.

Алгоритм гэж юу вэ?
Алгоритм нь тодорхой асуудлыг шийдвэрлэхийн тулд дагаж мөрдөх ёстой, нарийн тодорхойлогдсон, алхам алхмаар ажиллах үйлдлийн дараалал юм.

Өгөгдөлийн бүтэц гэж юу вэ?
Энэ нь компьютер эсвэл бусад тооцоолох төхөөрөмжид өгөгдлийг үр ашигтай зохион байгуулах, боловсруулах, хадгалах, хандах арга замыг хэлнэ.

Яагаад өгөгдлийн бүтэц, алгоритм чухал вэ?

Программист хүн үр дүнтэй, логик дараалалтай, цэгцтэй зөв код бичихийн тулд DSA-ийн талаар гүн гүнзгий мэдлэгтэй байх нь чухал. Учир нь cайн кодчилол гэдэг бол зүгээр нэг ажилладаг код байх бус хэр үр ашигтай ажиллаж байгаадаа гол хэмжүүр нь оршино. Тэгвэл үүнийг судалснаар хөгжүүлэгч бид бүхэнд яг ямар давуу талууд үүсэж байгааг доор жагсаая.

  • Асуудал шийдвэрлэх чадвар:
    DSA-ийг бид нарийн судалснаар, тухайн асуудлыг өргөн цар хүрээнд харах, дүн шинжилгээ хийх, илүү системтэй, үр дүнтэй логиктой шийдвэрлэх чадварт суралцана.
  • Ажлын ярилцлага:
    Ихэнх олон улсын болон томоохон технологийн компани дахь техникийн суурь шалгуур бол DSA байдаг. Ярилцлага авч байгаа хүн үүгээр дамжуулж ажилд горилогчийн асуудал шийдвэрлэх, анализ хийх, код бичих мөн зөөлөн ур чадварыг шалгадаг. Тийм ч учраас та олон улсын эсвэл F.A.A.N.G (Facebook, Amazon, Apple, Netflix, Google) шиг томоохон компанид ажиллахыг хүсэж л байгаа бол уг чадвараа зайлшгүй сайжруулах хэрэгтэй юм.
  • Сэтгэл ханамж:
    Бид өдөр тутмынхаа ажилд ямар нэгэн байдлаар хялбаршуулсан сан болон функцуудыг ашигладаг. Магадгүй ингэж бодохоор танд заавал DSA-ийг сурах шаардлагагүй мэт санагдаж болох юм. Гэвч түүний цаана нуугдсан алгоритм болон тухайн функц хэрхэн ажиллаж байгааг мэддэг байх нь таны хийж буй ажлыг илүү үр дүнтэйгээр шийдвэрлэхэд туслана. Мөн та үүнээс давхар сэтгэл ханамж мэдрэх болно.
  • Суурь ур чадвар:
    Таны DSA — ийн суурь мэдлэг сайн байснаар programming, machine learning, data-science, system design болон компьютерын шинжлэх ухааны бусад чиглэлээр суралцах эсвэл ур чадвараа сайжруулах үед бат бөх суурь болж хүчтэй дэмжлэг үзүүлэх болно.

Donald Knut: “People who analyze algorithms have double happiness”

Яагаад DSA чухал гэдгийг Simple-search (Энгийн хайлт) болон
Binary-search (Хоёртын хайлт) дээр жишээ авч дэлгэрүүлье.

Та надтай тоо таалцаж байна гэж төсөөлөөрэй. Таны зорилго бол
1–100 хүртэлх тоонуудаас байж болох хамгийн бага оролдлогоор миний бодсон тоо болох 57 таах. Оролдлого бүрд би таны хэлсэн тоог хэтэрхий бага, хэтэрхий их эсвэл зөв таасан эсэхийг хэлэх болно.

Simple search:
Хэрэв та 1,2,3,4 гэсэн дарааллаар таамаглал дэвшүүлэх юм бол миний бодсон тоо 100 байвал азгүйгээр бодоход та 100 удаагийн оролдлого дээрээ таах магадлалтай. Энэ бол энгийн хайлтын хамгийн том асуудал. Тийм ч учраас бид бүхэнд нөхцөл байдлаасаа хамааран сайн техник дээр суурилсан хайлтын арга хэрэгтэй байгаа юм.

Binary search:
Хоёртын хайлтын ажиллах зарчим бол шууд голын элементээс эхлэх юм. Цаашлаад таамаглал бүрд та тухайн жагсаалт дээрх элементүүдийн талыг нь устгах боломжтой. Тэгэхээр та шууд 50 гэсэн таамаглалыг эхэлж дэвшүүлж таарна. Харин 1–50 хүртэлх тоо хэтэрхий бага учраас шууд хасагдана. Ингээд таны дараагийн таамаглал 75 болно. Уг тоо 57-ааc хэт их учраас 75–100 хүртэлх тоо хасагдана. Энэ мэтчилэн явсаар та 7 дахь таамаглал дээрээ миний бодсон тоог олох боломжтой.

Тэгвэл тоо хэмжээ ихсэх тусам хэр ялгаа гарж байгааг харцгаая.

Ердөө нэг жижиг хайлтын алгоритм компьютер дээр тооцоолох байсан 11 өдрийн тооцооллыг 1 секунд ч хүрэхгүй хугацаанд хийж гүйцэтгэж байна гэхээр гайхалтай биш гэж үү?

Энэ мэтчилэн бодит амьдрал дээр бид маш их өгөгдөлтэй харьцаж, ажиллаж байдаг. Тиймээс өгөгдөл ихсэх тусам технологи талаасаа бидэнд илүү оновчтой, үр дүнтэй алгоритм, болон өгөгдлийн бүтцийн суурь ур чадвар хэрэгтэй байгаа юм. Яг ямар үед ямар DSA-ийг ашиглах вэ гэдгээ мэддэг байх нь биднийг энгийн нэг инженер бус илүү асуудлыг ул сууртай хардаг, дэлхийн түвшинд өрсөлдөж, үнэлэгдэхүйц инженер болох боломжийг олгоно.

Цаашлаад бид бүхэн дараа дараагийн нийтлэлээр доорх DSA-ийн суурь ойлголтуудыг хамтдаа амьдралын бодит жишээ дээр сурцгаах болно.

  • Time and Space complexity: How memory works, Notations, etc.
  • DSA: Array, LinkedList, Stack, Queue, Tree, Searching, Sorting, Hash tables, Dijkstra, Ad hoc, Graph Theory, Math, etc.
  • Programming paradigm: Recursion, Brute Force, Backtracking, Branch & Bound, Divide & Conquer, Greedy, Dynamic Programming, etc.

Дүгнэлт:

Төгсгөлд нь хэлэхэд энэ нийтлэлээр дамжуулан бага ч гэсэн ойлголтыг танд өгсөн гэж найдаж байна. Энэ бол зөвхөн техникийн суурь ур чадвар талаас нь бичсэн бөгөөд, дурдаагүй өөр олон зүйл байгаа гэдгийг хэлэх нь зүйтэй. Энэ хүртэл уншсан танд баярлалаа.

Ашигласан эх сурвалжууд:

--

--