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

Ерөнхий ойлголт#

Хүнд энгийн өдөр тутам аж төрөхөд, цааш үргэлжлүүлэн оршин тогтноход байнга л асуудал тулгарч түүнийг шийдвэрлэх арга замыг хайх хэрэг гардаг.

Хэн нэгэнд ажил хуваарилан хийлгэх, хэн нэгнээс ажил аван хийхэд бүр эсвэл өөртөө хандан үйлдэл хийхэд ч танд ямар нэгэн заавар тодорхой нэг зарчим бүхий дараалал хэрэг болно. Тухайн асуудалд тохирсон хамгийн тохиромжит шийдэл энэ бол Алгоритм.

Ямарваа нэг асуудлыг шийдэхийн төлөөх үйл ажиллагаа мөн тийм логик дарааллыг алгоритм гэдэг.

Гээд тодорхойлоход өнөө цаг үед болох байх. Харин өнгөрсөн үед бол өөр байлаа.

Spinning donut in ASCII

Түүх#

Ханз ашиглан бичвэл 算法(さんぽう)болох ба 算 (さん)буюу тооцоолол, 法 (ほう)буюу арга зам гэсэн хоёр ханзны нийлэмж учир ханзнаас үгийн утгыг ойлгох боломжтой.

Гэвч Логограф (нэг дүрс үсэг нь бүхэл бүтэн үг буюу ойлголт илэрхийлэх) суурьтай хэл бус нэг авиаг илэрхийлэх цагаан толгойн үсэгт суурилсан бичиг ашигладаг бидний хувьд шууд хараад тухайн үгийн утга гарал үүслийг мэдэх бэрх.

Иймийн учир “Algorithm” гэдэг үгийг Этимологи(үгийн уг гарал, үүслийг судалдаг хэл шинжлэлийн ухааны салбар) талаас нь судлах хэрэгтэй.

“Algorithm” гэдэг үг нь Muhammad ibn Musa al-Khwarizmi гэх Перс математикчийн нэрийн Латин орчуулга “Algoritmi”-гаас гаралтай.

Цаг хугацаа өнгөрч тухайн ойлголт хөгжихийн хэрээр үгийн бичиглэл түүний ард байх илэрхийлэмж ч өргөжин томордог. Тухайлбал:

Al-Khwarizmi(IX) → Algoritmi (XII) → Algorismus (XII-XV) → Algorithm

Хэрэглээ ба нийгэмд үзүүлж буй нөлөө#

Технологийн дэвшил (гар утас, хувийн компьютер зэрэг төхөөрөмж) интернэт, цахим мэдээллийн сүлжээг илүү хүртээмжтэй, хэрэглэхэд хялбар болгосноор мэдлэгийн салбар, худалдаа наймаа бизнесийн зах зээл олноороо цахим орчинд төвлөрөх болсон. (Жишээ нь Банк санхүү, худалдаа үйлчилгээний олон тооны веб сайт, апп.)

Үүний хажуугаар энэхүү орчинд цугларах өгөгдөл тэр хэмжээгээрээ ихсэж тэдгээрийг боловсруулах, үр дүнтэй ангилах, хурдан шуурхай хайн хүртээх зэрэг хэрэгцээ тулгараад байгаа юм.

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

Боловсруулах, Үр дүнтэй ангилах, Хурдан шуурхай хайн хүртээх

Дээрх боловсруулалтуудыг хийхэд зориулж хурд, өгөгдлийн хэмжээ, төрөл зэргээс хамаарсан олон хайх (searching), ангилан ялгах (sorting), дүрслэн тооцоолох, хувиргах алгоритмууд төрөн гарсан.

693

Дан ганц алгоритм ашиглах нь ч тухайн тохиолдолд хангалттай байж чаддаггүй. Ихэнх нөхцөлд “Өгөгдөлд нэвтрэх дарааллыг урьдаас тодорхойлон хялбар хурдтай нэвтрэлт хийх, эмх цэгцтэй, ойлгомжтой байлгах бүтэц” хэрэгтэй болдог.

Жич: Өгөгдлийн бүтэц, Програмын бүтэц зэрэг ойлголтуудын талаар өөр тусдаа нийтлэлээр нарийн авч үзэх болно.

Нэг үр дүнг үзүүлэх олон тооны арга зам, шийдэл байж болох ч тухайн бодлогын (асуудлын) нөхцөлд таарах хамгийн тохиромжит нэгийг нь сонгож хэрэглэдэг.

Хэрхэн үнэлэн үр дүнтэй ашиглах тухайд#

  1. Зорилтот үр дүнг гаргаж чадах найдвартай байдал
  2. Боловсруулалт хийх хурд, нарийвчлал зэрэг чадамж өндөр байх
  3. Тодорхой нэг л нөхцөлд бус бүхий л нөхцөлд ажиллаж чаддаг байх
  4. Өргөтгөн сайжруулахад амар хялбар байх
  5. Ойлгоход амар хялбар байх
  6. Бусад төхөөрөмж дээр ч мөн ажилдаг энгийн арга ашигласан байдал

Үнэлэх тухайд дээрх 6 шинжийг нь харах ба хамгийн чухал нь эхний 2 чанар. Эдгээр шалгуурыг хангавал сайн алгоритм болох хэдий ч бусад чанарыг ч мөн агуулбал илүү сайн алгоритм болно.

Харин ашиглахад анхаарууштай зүйл гэвэл “Төгс, бүхий л бодлогод тохирсон супер алгоритм гэж байхгүй (харин тодорхой нөхцөл хангагдсан тохиолдолд гүйцэтгэл нь төгс хэмжээнд гэж үзэгддэг алгоритмууд байдаг) бүх л алгоритм сул болон давуу талтай.

Жишээ:

  • Зарим тохиолдолд хэрэггүй:Binary search нь sort-логдсон өгөгдөлд хайлт хийхэд хамгийн хурдан бол эсрэг тохиолдолд огтхон ч хэрэггүй үйлдэл юм. (Тухайн өгөгдөлд тохиромжтой sorting алгоритмтай хамт ашиглах хэрэгтэй.)
  • Нэг л асуудалд чиглэсэн байдал: “Евклидийн алгоритм” нь Хамгийн их ерөнхий хуваагч олоход хамгийн хурдан алгоритм. Хугацааны үнэлгээ: O(log(min(a, b)))
  • Илүү тохиромжтой шийдэл байх: Дижикстрагийн алгоритм нь жинтэй(хоорондын ялгаатай зайтай) граф дотор хамгийн богино замыг олоход хэрэглэгддэг алгоритм бол жингүй граф үед BFS ашиглахад л хангалттай.

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

Эцэст нь:#

Заримдаа миний хувьд бодлого бодох нь ямар ч утгагүй санагддаг байсан. Үр дүн нь гал асаах шиг шууд л харагдахгүй зүйл байсан болоод тэр байх.

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

Гагцхүү “Эдгээр шийдлүүдийг ашиглан ижил төсөөтэй шинж чанарыг нь таниад, системтэйгээр шийдэл олох чадварыг суулгах нь бодлого бодохын ач холбогдол юм. ”

Системтэй сэтгэлгээг төлөвшүүлж чадварлаг нэгэн болохыг хүсвэл олон төрлийн алгоритм түүний хэрэгжилт байж болохуйц олон төслийг хийж, хамгийн гол нь бодлого бодох (дадлагажих) хэрэгтэй.

Энэхүү нийтлэл нь цуврал бөгөөд цаашид төсөл болон бүтээлүүдэд суурилан сонирхолтой алгоримтмууд, өгөгдлийн бүтэц зэргийг тайлбарлан хүргэх болно.

Орчин үеийн шийдлүүд (машин сургалтын алгоримтмууд, гүний сургалтын техникүүд)-ийг тусад мөн сайтар судалсны дараагаас танилцуулах учир энэ нийтлэлдээ дурдаагүй болно.

Энэ хүртэл уншсан танд баярлалаа.

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