Гарчиг[Нуух][Үзүүлэх]
Компьютерийн шинжлэх ухаан нь алгоритм болон өгөгдлийн бүтцийн нарийн төвөгтэй байдлыг ойлгоход чиглэгддэг.
Танд эрэмбэлэх шаардлагатай зүйлсийн жагсаалт байгаа боловч илүү төвөгтэй эрэмбэлэх алгоритмыг ашиглах цаг хугацаа, нөөц байхгүй.
Оруулах эрэмбэлэх нь хамгийн энгийн эрэмбэлэх алгоритмуудын нэг боловч том жагсаалтад удаан байж болно.
Хялбар хэрэгжүүлэх, ойлгох нь энэ аргыг програмистуудын дунд дуртай болгосон. Энэ нь жижиг жагсаалтад эсвэл танд хурдан шийдэл хэрэгтэй үед төгс төгөлдөр юм.
Энэ блог нийтлэлд бид оруулах эрэмбэлэх цаг хугацааны нарийн төвөгтэй байдлыг авч үзэх болно. Энэ алгоритм нь массивыг эрэмбэлэхэд хэрэглэгддэг ба O(n2). Энэ нь массивын хэмжээ нэмэгдэх тусам цаг хугацааны нарийн төвөгтэй байдал нэмэгддэг гэсэн үг юм.
Гэсэн хэдий ч, энэ алгоритм нь хурдан эрэмбэлэх зэрэг бусад ангилах алгоритмуудаас илүү хурдан байж болно.
Оруулах эрэмбэ хэрхэн явагддагийг нарийвчлан харцгаая!
Оруулах эрэмбэлэх алгоритм гэж юу вэ?
Нэг удаад нэг элемент, оруулах эрэмбэлэх нь эрэмбэлэх боломжтой массив үүсгэдэг бөгөөд үүнийг ихэвчлэн жагсаалт гэж нэрлэдэг.
Жишээлбэл, эрэмбэлэх нь хөрвүүлэгч гэх мэт нарийн төвөгтэй компьютерийн програмуудад хэрэглэгддэг бөгөөд энд токенуудын дараалал нь програмыг тайлбарлахад чухал байдаг.
Оруулах эрэмбэ хэрхэн ажилладаг вэ?
Бид массивыг эрэмбэлэхдээ оруулах эрэмбийг ашиглах үед алгоритм нь жагсаалтын хамгийн жижиг зүйлийг олж, зөв байрлалд оруулах замаар эхэлдэг.
Дараа нь дараагийн хамгийн жижиг зүйлийг олж, зөв байрлалд оруулах гэх мэт.
Алгоритм нь жагсаалтын дундуур давталт хийж, зүйл бүрийг өмнөхтэй нь харьцуулж ажилладаг.
Хэрэв зүйлүүд буруу дарааллаар байвал алгоритм тэдгээрийг солино. Дараа нь жагсаалт эрэмбэлэгдсэн эсэхийг шалгадаг бөгөөд хэрэв эрэмбэлэгдсэн бол алгоритм дуусна.
Практикт оруулах эрэмбэлэх нь ихэвчлэн хэд хэдэн мөр код ашиглан хэрэгждэг бөгөөд энэ нь жижиг массивуудыг эрэмбэлэх түгээмэл сонголт болгодог. Гэхдээ энэ алгоритмыг ашиглахдаа цаг хугацааны нарийн төвөгтэй байдлыг анхаарч үзэх хэрэгтэй.
Жишээ нь:
Оруулах эрэмбэ хэрхэн ажилладаг тухай жишээ энд байна. Бид дараах массивыг ашиглах болно.
1, 2, 3, 4, 5, 6
Алгоритм нь жагсаалтын хамгийн жижиг зүйл болох 1-ийг олох замаар эхэлдэг. Дараа нь түүнийг зөв байрлал буюу эхний байрлалд оруулна. Дараа нь дараагийн хамгийн жижиг зүйлийг олдог 2. Энэ нь зөв байрлалд оруулдаг бөгөөд энэ нь хоёр дахь байрлал юм.
Дараа нь дараагийн хамгийн жижиг зүйлийг олдог бөгөөд энэ нь 3. Үүнийг зөв байрлалд оруулдаг бөгөөд энэ нь гурав дахь байрлал юм.
Дараа нь дараагийн хамгийн жижиг зүйл болох 4-ийг олно. Энэ нь дөрөв дэх байрлал болох зөв байрлалд оруулах гэх мэт. Жагсаалтыг одоо эрэмбэлсэн!
Жагсаалтыг эрэмбэлэхийн тулд алгоритм нь зургаан харьцуулалт, солилцоо хийдэг болохыг жишээнээс харж болно. Учир нь n-ийг авдаг2 n зүйлийн жагсаалтыг эрэмбэлэхийн тулд харьцуулах, солих. Энэ тохиолдолд n=6 байна.
Оруулах цаг хугацааны нарийн төвөгтэй байдлыг хэрхэн сайжруулах вэ?
Оруулахын тулд эрэмбэлэх хугацаа нь O(n2), үүнийг хурдан эрэмбэлэх гэх мэт илүү сайн эрэмбэлэх алгоритмыг ашиглан сайжруулж болно.
Quicksort нь O(n log n) ажиллах хугацаатай бөгөөд энэ нь O(n)-ээс хамаагүй хурдан юм2).
Гэсэн хэдий ч зарим тохиолдолд оруулах эрэмбэ нь хурдан эрэмбэлэхээс илүү хурдан байж болно.
Жишээлбэл, хэрэв жагсаалт аль хэдийн дараалалд орсон бол оруулах эрэмбэ нь хурдан эрэмбэлэхээс бага хугацаа шаардагдана.
Практикт оруулах эрэмбэлэх нь ихэвчлэн хэд хэдэн мөр код ашиглан хэрэгждэг бөгөөд энэ нь жижиг массивуудыг эрэмбэлэх түгээмэл сонголт болгодог.
Гэхдээ энэ алгоритмыг ашиглахдаа цаг хугацааны нарийн төвөгтэй байдлыг анхаарч үзэх хэрэгтэй.
Цаг хугацааны нарийн төвөгтэй байдал
Хамгийн муу тохиолдлын нарийн төвөгтэй байдал O(n2):
Цагийн нарийн төвөгтэй байдал нь массивын хэмжээ нэмэгдэх тусам нэмэгддэг. Үүнд n хэрэгтэй2 n зүйлийн жагсаалтыг эрэмбэлэхийн тулд харьцуулах, солих.
Жишээлбэл, хэрэв бид 1000 хэмжээтэй массивтай бол алгоритм нь массивыг эрэмбэлэхийн тулд 1,000,000 харьцуулалт, своп хийх болно.
Шилдэг нарийн төвөгтэй байдал O(n):
Цагийн нарийн төвөгтэй байдал нь оролтын массивын хэмжээтэй ижил байна. I
t нь n зүйлийн жагсаалтыг эрэмбэлэхийн тулд n харьцуулалт, солилцоо хийдэг. Жишээ нь, 5 хэмжээтэй массивыг авч үзье. Алгоритм нь массивыг эрэмбэлэхийн тулд таван харьцуулалт, своп хийх болно.
Дундаж нарийн төвөгтэй байдал O(n2):
Цаг хугацааны нарийн төвөгтэй байдал нь энэ тохиолдолд хамгийн муу болон хамгийн сайн тохиолдлын нарийн төвөгтэй байдлын хооронд байна.
Үүнд n хэрэгтэй2 n зүйлийн жагсаалтыг эрэмбэлэхийн тулд харьцуулах, солих.
Тиймээс оруулах эрэмбэлэх нь тогтвортой эрэмбэлэх алгоритм юм.
Оруулах эрэмбэ яагаад тогтвортой байдаг вэ?
Оруулах массив дахь тэнцүү элементүүдийн дарааллыг хадгалдаг тул оруулах эрэмбэ тогтвортой байна.
Энэ нь өгөгдөл хайх, санхүүгийн шинжилгээ хийх гэх мэт олон програмуудад чухал ач холбогдолтой. Жишээлбэл, хэрэв бид хоёр тооны жагсаалттай бөгөөд тэдгээрийг харьцуулахыг хүсч байвал элементүүдийн дараалал хадгалагдсан эсэхийг шалгах хэрэгтэй.
Жагсаалтуудыг эрэмбэлэхгүй бол бид тэдгээрийг үнэн зөв харьцуулахгүй.
хариу үлдээх