Алгоритмын нарийн төвөгтэй байдал нь үндсэндээ хоёр нөөцийг авч үздэг:
цаг
(гүйцэтгэх хугацаа) ба
зай
(санах ойн хэрэглээ). Цагийн нарийн төвөгтэй байдал нь оролтын хэмжээгээр ажиллах хугацаа хэрхэн өсдөгийг хэмждэг (
n
), орон зайн нарийн төвөгтэй байдал нь санах ойн хэрэглээг үнэлдэг. Жишээ нь:
- бүхий алгоритм
O(n)
цаг хугацааны нарийн төвөгтэй байдал нь оролтын хэмжээтэй шугаман байдлаар хэмжигддэг.
- бүхий алгоритм
O(1)
орон зайн нарийн төвөгтэй байдал нь оролтын хэмжээнээс үл хамааран байнгын санах ойг ашигладаг.
Хоёр хэмжигдэхүүн нь чухал юм. Хурдан алгоритм нь том өгөгдлийн багцын санах ойг шавхаж, санах ойг хэмнэлттэй алгоритм нь бодит цагийн хэрэглээний хувьд хэтэрхий удаан байж болно.
Үр ашиг нь бодит байдлыг шаарддаг. 10 сая зүйлийн эсрэг 10 зүйлийн жагсаалтыг эрэмбэлэх талаар бодож үзээрэй:
- A
хөөс ангилах
(
O(n)
) нь жижиг өгөгдлийн багцад хангалттай байж болох ч том өгөгдлийн багцад боломжгүй болно.
- A
нэгтгэх төрөл
(
O(n log n)
) нь илүү том өгөгдлийн багцуудыг сайн зохицуулдаг боловч нэмэлт санах ой шаарддаг.
Нарийн төвөгтэй байдлын шинжилгээ нь алгоритмуудыг харьцуулах бүх нийтийн хэлээр хангадаг бөгөөд техник хангамжийн нарийн ширийн зүйлийг хасдаг. Энэ нь хөгжүүлэгчдэд өргөтгөх чадварыг урьдчилан таамаглах, чухал системд саад тотгор учруулахгүй байх боломжийг олгодог.
Асимптотик тэмдэглэгээ нь функцүүдийн хязгаарлагдмал үйл ажиллагааг дүрсэлж, нарийн төвөгтэй байдлын товчлолыг санал болгодог. Гурван үндсэн тэмдэглэгээ нь:
Big O тэмдэглэгээ нь алгоритмын авах хамгийн их хугацаа эсвэл орон зайг тодорхойлдог. Жишээ нь:
-
O(1)
: Тогтмол хугацаа (жишээ нь, массивын элементэд индексээр хандах).
-
O(n)
: Шугаман цаг (жишээ нь, жагсаалтаар давтагдах).
-
O(n)
: Квадрат цаг (жишээ нь, хөөсөөр эрэмбэлэгдсэн үүрлэсэн гогцоо).
Big O нь гүйцэтгэлийн дээд хязгаарыг баталгаажуулдаг тул хамгийн түгээмэл хэрэглэгддэг хэмжүүр юм.
Омега нь шаардагдах хамгийн бага хугацааг тодорхойлдог. Жишээ нь:
- Шугаман хайлттай
(1)
хэрэв зорилт нь эхний элемент бол.
Хэдийгээр өөдрөг үзэлтэй боловч хамгийн сайн тохиолдлын дүн шинжилгээ нь хамгийн муу тохиолдлын төлөвлөлтөд мэдээлэл багатай байдаг.
Тета нь Big O болон Omega-г нэгтгэдэг бөгөөд энэ нь яг асимптотик зан төлөвийг илэрхийлдэг. Хэрэв алгоритм нь хамгийн сайн ба хамгийн муу тохиолдол ижил байвал:
-
(n log n)
дундаж болон хамгийн муу тохиолдлын хувилбаруудыг нэгтгэхэд хамаарна.
Эдгээр тэмдэглэгээ нь тогтмол болон доод эрэмбийн нэр томъёонуудыг хийсвэрлэн авч, өсөлтийн хурдад анхаарлаа хандуулдаг. Тухайлбал, 2n + 3n + 4 хялбаршуулдаг O(n) Учир нь томоор квадрат нэр томъёо давамгайлдаг n .
Нарийн төвөгтэй байдлын ангиллыг ойлгох нь алгоритмуудыг өргөтгөх чадвараар нь ангилахад тусалдаг. Хамгийн үр дүнтэйгээс хамгийн бага хүртэлх шатлалыг энд харуулав:
Гүйцэтгэх хугацаа эсвэл санах ой нь өөрчлөгдөөгүй хэвээр байна
n
ургадаг.
-
Жишээ
: Түлхүүрээр хэш хүснэгтийн утгад хандах.
Ажиллах хугацаа нь логарифмын дагуу өсдөг
n
.
-
Жишээ
: Хоёртын хайлт нь давталт бүрт оролтын зайг хоёр дахин багасгадаг.
Ажиллах цаг нь пропорциональ хэмжээтэй байна
n
.
-
Жишээ
: Эрэмбэлэгдээгүй жагсаалтаар шугаман хайлт.
Хувааж, ялах алгоритмд түгээмэл байдаг.
-
Жишээ
: Эрэмбэлэх болон нуруулдан эрэмбэлэхийг нэгтгэнэ.
Үүрлэсэн давталт нь тэсрэх өсөлтөд хүргэдэг.
-
Жишээ
: Бөмбөлөгөөр эрэмбэлэх ба сонгон ангилах.
Нэмэлт оролт бүрт ажиллах хугацаа хоёр дахин нэмэгддэг.
-
Жишээ
: Цээж бичихгүйгээр рекурсив Фибоначчийн тооцоо.
Сэлгээнд суурилсан алгоритмууд.
-
Жишээ
: Явган худалдагчийн асуудлыг харгис хүчээр шийдвэрлэх.
Хоорондын ялгаа O(n log n) болон O(n) төлөө ширүүн болдог n = 10 : эхнийх нь миллисекундэд ажиллах боломжтой бол сүүлийнх нь хэдэн өдөр үргэлжилж болно.
Алгоритмууд нь оролтын тохиргоонд тулгуурлан өөр өөрөөр ажилладаг. Бүх тохиолдлуудад дүн шинжилгээ хийх нь бат бөх байдлыг баталгаажуулдаг:
Өгөгдлийн сангийн асуулга оновчтой болгох нь хэш холболтын аль нэгийг сонгож болно ( O(n + м) ) болон үүрлэсэн гогцоонд нэгдэх ( О(нм) ) өгөгдлийн хуваарилалт дээр үндэслэсэн. Урьдчилан таамаглах боломжгүй тохиолдолд аюулгүй байдлын чухал системд (жишээ нь нисэхийн програм хангамж) хамгийн муу тохиолдлын дүн шинжилгээ хийх нь чухал юм.
Үүнтэй ижил асуудлыг янз бүрийн алгоритм ашиглан шийдэж болно. Жишээлбэл, утгуудын жагсаалтаас зорилтот утгыг хайх асуудлыг шугаман хайлт, хоёртын хайлт, хэш хүснэгтийн хайлт гэх мэт өөр өөр алгоритмуудыг ашиглан шийдэж болно.
Доорх хүснэгтэд жагсаалтаас зорилтот утгыг хайх эдгээр алгоритмуудын цаг хугацаа, орон зайн нарийн төвөгтэй байдлыг харьцуулж үзүүлэв. n үнэт зүйлс.
Алгоритмыг сонгох нь асуудлын хэмжээ, оролтын шинж чанар, боломжтой нөөцөөс хамаарна. Жишээлбэл, жагсаалт нь жижиг бөгөөд эрэмбэлэгдээгүй бол шугаман хайлт нь хамгийн сайн сонголт байж болно. Жагсаалт нь том бөгөөд эрэмбэлэгдсэн бол хоёртын хайлт нь хамгийн сайн сонголт байж магадгүй юм. Жагсаалт нь том бөгөөд эрэмбэлэгдээгүй бол хэш хүснэгтийн хайлт нь хамгийн сайн сонголт байж болох юм.
Хорогдуулсан шинжилгээ нь үйл ажиллагааны дарааллын дундаж хугацааг харуулдаг.
-
Жишээ
: Динамик массив дүүрсэн үед хоёр дахин хүчин чадалтай. Ганц бие байхдаа
түлхэх
ажиллагаа авч магадгүй
O(n)
хугацаанд хорогдуулсан зардал хэвээр байна
O(1)
.
гэх мэт алгоритмууд
Монте Карло
болон
Лас Вегас
үр ашигтай байхын тулд санамсаргүй байдлыг ашиглах.
-
Жишээ
: Миллер-Рабин анхдагч байдлын тест нь магадлалын баталгаатай боловч детерминистик аргуудаас хурдан байдаг.
Зарим асуудал (жишээ нь, Булийн сэтгэл ханамж) байдаг NP-бүрэн , энэ нь олон гишүүнт цаг хугацааны тодорхой шийдэл байхгүй гэсэн үг юм. Багасгах замаар NP-ийн бүрэн байдлыг нотлох нь тооцооллын хатуулгийг ангилахад тусалдаг.
Ан O(n) Кластер хийх алгоритм нь их хэмжээний өгөгдлийн багцад саад тотгор болж, kd мод гэх мэт ойролцоо аргууд руу шилжихэд хүргэдэг. O(n log n) ).
Нийтийн түлхүүрийн систем нь хатуулагт тулгуурладаг O(2) халдлагыг эсэргүүцэх асуудлууд (жишээ нь, бүхэл тоон хүчин зүйлчлэл).
Бодит цагийн дүрслэх хөдөлгүүрүүдийг нэн тэргүүнд тавьдаг O(1) 60+ FPS-ийг хадгалах физикийн симуляцийн алгоритмууд.
Худалдан авалт чухал:
-
Цаг хугацаа vs. Орон зай
: Хэш газрын зураг ашиглах (
O(1)
хайлтууд) санах ойн үнээр.
-
Энгийн байдал vs. Оновчтой байдал
: Оруулах эрэмбэ (
O(n)
) нь жижиг, бараг эрэмблэгдсэн өгөгдлийн багцад илүү тохиромжтой байж болох юм.
Рекурсив алгоритмуудын хувьд давтагдах харилцааны загвар ажиллах хугацаа. Жишээ нь, нэгтгэх, давтагдахыг эрэмбэлэх:
[ T(n) = 2T(n/2) + O(n) ] гэж шийднэ
O(n log n)
дамжуулан
Мастер теорем
.
Эмпирик тест нь онолын шинжилгээг нөхдөг. Профайл хийх хэрэгслүүд (жишээ нь, Valgrind, perf) нь бодит ертөнцийн саад бэрхшээлийг илрүүлдэг.
питон
def linear_sum(arr):
нийт = 0
for num in arr:
нийт += тоо
нийт өгөөж
def квадрат_нийлбэр(arr):
нийт = 0
би байна:
for j in arr:
нийт += i * j
нийт өгөөж
байхад O(n) тогтмолуудыг хийсвэрлэх, a 100n алгоритм нь a-аас удаан байж болно 0.01n практикт зориулсан алгоритм n .
Ан O(n log n) алгоритм хангалтгүй ажиллаж магадгүй O(n) төлөө n = 10 хэт ачааллын улмаас.
Цээжлэгдсэн Фибоначчийн функц ( O(n) зай) нь давтагдах хувилбараас ялгаатай нь том оролтууд дээр эвдэрч болзошгүй ( O(1) зай).
Өөрийгөө тэнцвэржүүлдэг BST ( O(лог n) хайлт) ердийн BST-ээс илүү аюулгүй ( O(n) хамгийн муу тохиолдол) итгэлгүй өгөгдөлд.
Алгоритмын нарийн төвөгтэй байдлын шинжилгээ нь тооцооллын үр ашгийн өргөн хүрээг хамарсан хөгжүүлэгчдийг чиглүүлдэг луужин юм. MTSC7196 оюутнуудын хувьд энэ мэргэжлийг эзэмшсэнээр онолын мэдлэг, практик туршлагаас холбодог. Цаг хугацаа, орон зайн хэрэгцээг задлан шинжилж, асимптотик хязгаарыг харьцуулж, бодит ертөнцийн солилцоог удирдан чиглүүлснээр хөгжүүлэгчид хэмжүүрээр хэмжигдэхүйц, найдвартай ажиллагаатай системийг бүтээж чадна.
Өгөгдөлд тулгуурласан инновациар тодорхойлогддог эрин үед хоёрыг ялгах чадвар O(n log n) болон an O(n) шийдэл нь зөвхөн эрдэмтэн судлаачдын стратегийн зайлшгүй шаардлага биш юм. Хичээлийнхээ явцад ахиц дэвшил гаргахдаа нарийн төвөгтэй байдлын шинжилгээ нь зөвхөн тоо, тэмдэгтийн тухай биш гэдгийг санаарай. Энэ нь тооцооллын зүрхний цохилтыг ойлгох тухай юм.
2019 оноос хойш үнэт эдлэл, Хятад, хятад, үнэт эдлэлийн үйлдвэрлэлийн суурь байгуулагдсан. Бид бол үнэт эдлэлийн аж ахуйн нэгжийн загвар, үйлдвэрлэл, худалдаа, худалдаа.
+86-19924726359/+86-13431083798
Шал 13, Гоме ухаалаг хотын баруун цамхаг, Үгүй. 33 juxin гудамж, Haizhu дүүрэг, Гуанжоу, Хятад.