Mürəkkəblik nə deməkdir? Çətin insanlar kimlərdir? Mədən çətinliyi: ona nə təsir edir və niyə böyüyür

6 cavab

Mürəkkəblik həmişə müəyyən bir dəyişənə və ya dəyişənlər dəstinə nisbətən müəyyən edilir. Beləliklə, standart daimi vaxtın daxil edilməsindən danışdıqda, siyahıdakı elementlərin sayına nisbətən sabit vaxtdan danışırıq. Yəni O(1) daxil edilməsi o deməkdir ki, siyahıda mövcud olan elementlərin sayı əlavələrin ümumi mürəkkəbliyinə təsir etmir. Siyahıda 500 və ya 50000000 element ola bilər və daxiletmə əməliyyatının mürəkkəbliyi eyni olacaq.

Məsələn, std::list O(1) daxiletmə və silinmələrə malikdir; siyahıdakı elementlərin sayı əlavələrin mürəkkəbliyindən asılı deyil. Bununla belə, yaddaşın ayrılmasının mürəkkəbliyi artıq ayrılmış şeylərin sayından asılı ola bilər. Lakin O(1) siyahıdakı elementlərin sayından bəhs etdiyi üçün bunu əhatə etmir. Və bu ehtimal edilmir, çünki o zaman biz məlumat strukturunu deyil, yaddaş ayırıcısının mürəkkəbliyini ölçmüş olarıq.

Bir sözlə, bu başqa bir ölçüdür.

Bu o deməkdir ki, biz alqoritmimizi istədiyimiz qədər güclü şəkildə həyata keçirə bilərik, o cümlədən zamanın heç bir praqmatik mənada sabit olmadığı, lakin ehtiva etdiyimiz obyektlər üzərində "əməliyyatların" sayına hörmət etdiyimiz alqoritm.

Tətbiqlərə nisbətən mürəkkəblik göstərilmir. Alqoritmlərə nisbətən müəyyən edilir. İş vaxtı çətin iş olmadığı üçün kontekstin dəyişə bilməsinin əhəmiyyəti yoxdur.

Yuxarıda göstərildiyi kimi, std::list-i silinmələrə münasibətdə O(log(n)) olan yaddaş ayırıcısı ilə həyata keçirə bilərsiniz (burada n ayırmaların sayıdır). Bununla belə, siyahıdakı elementin silinməsi siyahıdakı elementlərin sayına görə yenə də O(1) olacaq.

Mürəkkəbliyi ümumi performansla qarışdırmayın. Mürəkkəbliyin məqsədi müxtəlif dəyişənlərə aid alqoritmlər üçün ümumi ölçüyə malik olmaqdır. Kodunun sürətli işləməsini istəyən bir proqramçının məqsədi bu performansa nail olmaq üçün tələb olunan mürəkkəbliyə uyğun gələn alqoritmin ağlabatan tətbiqini tapmaqdır.

Mürəkkəblik alqoritmin effektivliyini qiymətləndirmək üçün bir vasitədir. Mürəkkəblik düşünməyi dayandıra biləcəyiniz demək deyil.

“Amortizasiya” tam olaraq nə deməkdir?

Anladığım kimi, daimi mürəkkəblik əməliyyatın O(1) olması deməkdir: neçə atom əməliyyatının (oxu/yazma, montaj təlimatları, nə olursa olsun) yerinə yetiriləcəyini əvvəlcədən deyə bilərsiniz. Və bu qiymətləndirmə hədəf obyektin bütün mümkün dövlətləri üçün ümumi sərhəddir. Burada bir məqam var: çox yivli mühitdə siz axın açarlarını proqnozlaşdıra bilməzsiniz, ona görə də real vaxt rejimində OS-də yalnız keçən iş vaxtı ilə bağlı bəzi əsaslandırmalar apara bilərsiniz.

Amortizasiya edilmiş daimi mürəkkəblik haqqında, daha da zəifdir. Cavabların xülasəsini yazmaqla bu, orta hesabla əməliyyatınızın davam etdiyini təmin edir. Bu o deməkdir ki, N sonrakı əməliyyatlar üçün elementar əməliyyatların sayı O(N) -dir. Bu o deməkdir ki, elementar əməliyyatların sayı təxminən O(1)-dir, lakin bəzi nadir atlamalara imkan verir. Məsələn, vektorun quyruğuna element əlavə etmək adətən qalıcıdır, lakin bəzən əlavə ağırlıq qaldırma tələb olunur; amortizasiya edilmiş sabit vaxt o deməkdir ki, əlavə əməliyyat tez-tez yerinə yetirilmir və proqnozlaşdırıla bilən vaxt tələb edir, beləliklə, N əməliyyatının ümumi vaxtı hələ də O(N) olur. Təbii ki, eyni tutma burada da keçərlidir.

Beləliklə, suallarınıza cavab vermək üçün:

  • Standartın kompleks zəmanətləri yalnız əməliyyatı yerinə yetirmək üçün tələb olunan maşın kodu təlimatlarının sayına şamil edilir və icra müddətinin heç bir şəkildə məhdud olduğunu nəzərdə tutmur. (Həqiqətən də, son vaxtlara qədər C++ dili ilə bağlı mövzu göstəricisi belə yox idi, buna görə də standart C++ nöqteyi-nəzərindən bu vaxta qədər proqram xüsusi C++ maşınında icra olunurdu.)
  • Köhnəlmə "orta hesabla sabitlə məhdudlaşır" ki, bu adətən kifayət qədər nadir sapmalarla demək olar ki, həmişə sabit məhdud əməliyyat vaxtı vəziyyətində baş verir.

Redaktə edin:
Siz, məsələn, C++ standartının 23.1 bölməsinə baxa bilərsiniz:

Bu bölmədəki bütün mürəkkəblik tələbləri yalnız daxil edilmiş obyektlər üzərində əməliyyatların sayı baxımından müəyyən edilir.

əməliyyatın "daimi mürəkkəbliyə" malik olduğu deyildikdə, bu, adətən, ilk növbədə zamanın mürəkkəbliyinə istinad edir. Mən məkan mürəkkəbliyinə istinad edə bilərdim, amma belə olsa, bu, açıq şəkildə normal olaraq ifadə ediləcəkdir.

İndi əməliyyatın mürəkkəbliyi əməliyyatda işlənmiş elementlərin sayı artdıqda əməliyyatı başa çatdırmaq üçün nə qədər vaxtın artacağına aiddir. Daimi mürəkkəblik əməliyyatı üçün funksiya sıfır elementin və ya on milyon elementin işlənməsindən asılı olmayaraq eyni vaxt aparacaq.

    swap() daimi mürəkkəblikdir, çünki vektorda nə qədər element olsa da, əməliyyat eyni vaxt aparacaq.

    siyahıya klikləyin. daimi mürəkkəblikdir, çünki yeni elementin ayrılması müəyyən vaxt tələb edə bilsə də, siyahıda 10 milyon element olduğu üçün bu bölüşdürmə vaxtı artmır (ən azı alqoritmik mənada deyil - əlbəttə ki, boş yaddaş böyüyərsə və daha çox tükənmiş , ayırma daha uzun çəkə bilər, lakin alqoritmik nöqteyi-nəzərdən sonsuz miqdarda yaddaş var).

    vektorda push_back() "amortizasiya edilmiş" sabit adlanır, çünki adi halda, yenidən bölüşdürmə baş vermədikdə, əməliyyatın keçəcəyi vaxt vektorda artıq neçə elementin olması ilə əlaqəli deyil - eyni miqdarda uzunluğu 10 milyon olan vektora nisbətən sıfır uzunluqlu vektora yeni bir element əlavə etmək üçün vaxt lazımdır. Bununla belə, vektorun yenidən bölüşdürülməsi lazımdırsa, mövcud elementlərin bir nüsxəsinə sahib olmaq lazım olacaq və bu daimi əməliyyat deyil - bu, xətti əməliyyatdır. Lakin vektor elə tərtib edilməlidir ki, yenidən bölüşdürmələr nadir hallarda baş versin, beləliklə, onlar bir çox push_back() əməliyyatları üzərində amortizasiya oluna bilsinlər.

lakin vektorda push_back etmək daha gözlənilməzdir. Çox vaxt bu, çox sürətli olacaq, lakin hərdən və sonra bütün məlumatlar üçün yeri yenidən bölüşdürməli və hər bir elementi yeni yerə köçürməli olacaq. Beləliklə, icra müddəti baxımından yalnız list::push_front ilə müqayisədə daha az proqnozlaşdırıla bilər, lakin yenə də davamlı (amortizasiya) adlanır. Orta hesabla, vektora böyük miqdarda məlumat əlavə etmək, əlavə edilmiş məbləğdən asılı olmayan bir mürəkkəblik tələb edəcək, buna görə də "amortizasiya edilmiş sabit" vaxt adlanır. (Düz?)

Mürəkkəblik O(1) - sabit (vaxt mürəkkəbliyi nəzərə alınmaqla) alqoritmin tamamlanma vaxtının məsələnin ölçüsü ilə bağlı olmadığını bildirir.

Beləliklə, hashed strukturda dəyərin axtarışı O(1)-dir, çünki bunu etmək üçün lazım olan vaxt onun dəyərlərinin sayından asılı deyildir. Bununla belə, eyni şey əlaqəli siyahıya aid deyil, çünki dəyərimizi tapmaq üçün dəyərləri (elementlərin sayı artdıqca onların sayı dəyişir) skan etməliyik.

3-cü halda, hər bir elementi kopyaladıqda, bu, O(1) əməliyyatı deyil, O(N) əməliyyatıdır (lakin əksər hallarda O(1) olur, ona görə də adətən sabitdir). Amortizasiya alqoritmin adətən O(1) vaxtında tamamlandığını və nadir hallarda bu O(N) vəziyyətinə düşdüyünü qeyd etməklə bunu nəzərə alır.

Mədən çətinliyi nədir? Nümunə olaraq Bitcoin istifadə edin.

Cryptocurrency madenciliği çox sərfəli bir investisiya ola bilər. Amma valyuta mədənçiliyindən pul qazanmaq üçün sənayenin nüanslarını yaxşı başa düşmək lazımdır. Hər hansı bir mədənçi üçün ən vacib anlayışlardan biri mədən işinin çətinliyidir. Gəlir birbaşa mədənçilik çətinliyindən asılıdır. Bu məqalədə mədən çətinliyinin nə olduğu, necə formalaşdığı və nədən asılı olduğu ətraflı təsvir edilmişdir.

"Mədən çətinliyi" termini nə deməkdir?

Kriptovalyuta mədənçiliyi blockchain zəncirinin yeni bloklarının yaradılmasını və əməliyyatların qeydə alınmasını əhatə edən bir prosesdir. Mədənçiləri, bütün köçürmələri qeyd edərək, kitablarını yeni saxlamaq üçün daim çalışan mühasiblərlə müqayisə etmək olar. Amma istənilən iş ödənilməlidir. Madenciler sistemdən çıxarılan pul vahidinin sikkələri şəklində mükafat alırlar.

Kriptovalyutaların xüsusiyyətlərindən biri deflyasiya xarakteri daşıyır. Bu o deməkdir ki, qazılmış sikkələrin ümumi sayı proqram kodu ilə müəyyən edilmiş sayından çox ola bilməz. Məsələn, bitkoinlərin maksimum sayı 21 milyon sikkədir. Üstəlik, son Bitcoin yalnız 2140-cı ildə çıxarılacaq. Madencilərin sayına baxmayaraq, hər 10 dəqiqədən bir cəmi 12,5 BTC çıxarılır. Bu sikkələr sərf olunan hesablama gücünə görə mədənçilər arasında paylanır. İmzalanmış blok üçün mükafat artmır (və hər 4 ildən bir hətta yarıya endirilir). Mədənçilərin sayı artarsa, hər bir fərdi mədənçinin gəliri mütənasib olaraq azalır. Getdikcə daha çox yeni kriptovalyutanın gəlməsi ilə məhdud mükafatlar üçün rəqabət artır.

Bu vəziyyəti aydın şəkildə nümayiş etdirmək üçün kriptovalyuta şəbəkəsinin hesablanmış parametri “mədənçilik çətinliyi” təqdim edilmişdir. Mədənin çətinliyi bloku imzalamaq və bunun üçün mükafat almaq üçün riyazi problemi həll etməyin nə qədər çətin olduğunu əks etdirən bir metrikdir. Müəyyən bir müddətdən sonra çətinlik avtomatik olaraq yenidən hesablanır. Hər bir kriptovalyuta üçün fərqlidir. Məsələn, Bitcoin mədən işinin çətinliyi hər 2016 blokda yenidən hesablanır, onun çıxarılması təxminən 2 həftə çəkir. Proqram koduna əsasən, çətinlik elə tənzimlənir ki, mədənçilərin sayından və ümumi hashreytdən asılı olmayaraq növbəti blokun axtarışı təxminən 10 dəqiqə çəksin.

Son 2016 bloklarının axtarışı iki həftədən az çəksə, çətinlik avtomatik olaraq artır. Bu, mədən cihazlarının ümumi hesablama gücünün artdığını göstərir. Əksinə, mürəkkəbliyi azaltmaq üçün bir siqnal 2016 bloklarının axtarışında bir yavaşlama olacaq, çünki bütün cihazların hashrate azalıb. Nəticə yeni sikkələrin buraxılma sürətinə sıx nəzarətdir.

Mining çətinliyini harada tapmaq olar. Ən yaxşı 10 kriptovalyutanı əldə etmək çətinliyi.

Mədənin çətinliyi vaxtaşırı yenidən hesablanan dinamik bir göstəricidir. Mədən avadanlığının hesablama gücü artdıqca mürəkkəblik də artır. Valyutaların rəsmi saytlarında kriptovalyuta mədənçiliyinin çətinliyi ilə bağlı aktual məlumatları axtarmaq daha yaxşıdır. Bununla belə, bu çətin ola bilər. Mədən statistikasına bağlantılar bəzən hətta rəsmi saytlarda tapmaq çətindir. Prosesi sadələşdirmək üçün bütün kriptovalyutalar haqqında statistik məlumatların veb-saytları aqreqatorları yaradılmışdır. Onlar təkcə mədən işinin çətinliyi haqqında deyil, həm də bir neçə onlarla digər göstəricilər haqqında cari məlumatları toplayır, emal edir və dərc edirlər: qiymət, kapitallaşma, hashrate, gəlirlilik, əməliyyatların sayı və s.

100-dən çox kriptovalyuta haqqında ən son məlumatı aşağıdakı internet saytlarında əldə etmək olar:

  • https://www.coinwarz.com/charts/difficulty-charts
  • https://bitinfocharts.com/ru/
Kriptovalyuta adıKapitallaşma (11/12/2017Çətinlik cədvəlinə keçid*
Bitcoin$102 337 870 442 https://blockchain.info/ru/charts/difficulty

https://bitinfocharts.com/ru/comparison/difficulty-btc-nmc.html

https://www.coinwarz.com/difficulty-charts/bitcoin-difficulty-chart

Bitcoin Cash $29 402 898 569 https://bitinfocharts.com/ru/comparison/bitcoin%20cash-difficulty.html

https://www.coinwarz.com/difficulty-charts/bitcoincash-difficulty-chart

Ethereum$28 727 632 599 https://bitinfocharts.com/ru/comparison/ethereum-difficulty.html

https://www.coinwarz.com/difficulty-charts/ethereum-difficulty-chart

Dalğalanma$7 559 040 243 Mədən mümkün deyil**
Litecoin$3 143 298 761 https://bitinfocharts.com/ru/comparison/litecoin-difficulty.html

https://www.coinwarz.com/difficulty-charts/litecoin-difficulty-chart

Daş$2 603 868 832 https://bitinfocharts.com/ru/comparison/dash-difficulty.html

https://www.coinwarz.com/difficulty-charts/dash-difficulty-chart

Ethereum Classic$1 867 386 337 https://bitinfocharts.com/ru/comparison/ethereum%20classic-difficulty.html

https://www.coinwarz.com/difficulty-charts/ethereum-classic-difficulty-chart

Monero$1 745 200 256 https://bitinfocharts.com/ru/comparison/monero-difficulty.html

https://www.coinwarz.com/difficulty-charts/monero-difficulty-chart

NEO$1 703 832 000 Mədən mümkün deyil**
NEM$1 595 538 000 Mədən mümkün deyil**

* Nəzərə alın ki, mədənçilik çətinliyi zamanla dəyişir, ona görə də fərqli saytlar müxtəlif çətinlik məlumatları təqdim edə bilər. Bəzən fərq iki fərqli aqreqatorda valyuta ilə 10-20%-ə çatır. Əgər siz yalnız marağı təmin etmək üçün deyil, praktiki məqsədlər üçün mədənçilik çətinliyinin göstəricisini axtarırsınızsa, onda orta rəqəmlərə diqqət yetirin. Məsələn, əgər siz tarixi dinamikaya əsaslanaraq gələcəkdə mədənçilik çətinliyində dəyişikliklərin proqnozunu verirsinizsə, o zaman iki-dörd həftə deyil, son altı aydan bir ilə qədər olan məlumatları götürmək daha məntiqlidir.

** Bəzi kriptovalyutalar ənənəvi mənada çıxarıla bilməz. Bəziləri cüzdandakı sikkələrə vaxtaşırı faiz yığılan POS-mədən istifadə edir. POS-mədənçilik üçün xüsusi avadanlıq almaq və elektrik enerjisinə pul xərcləmək lazım deyil. Digər kriptovalyutalar (məsələn, Ripple) artıq tam olaraq çıxarılıb və yalnız sahiblər arasında bölüşdürülür.

Mədən çətinliyi: nə təsir edir və niyə böyüyür.

Mədənin çətinliyi mədənçinin gəlirini müəyyən edir. Qazanılan sikkələrin sayı mədən işinin çətinliyi ilə tərs mütənasibdir. Şəbəkə çətinliyi 20% artarsa, hər bir fərdi mədənçinin kriptovalyuta gəliri 20% azalır.

Məsələn, bitcoin mining antminer s7 üçün ASIC 2017-ci ilin ortalarında (daha doğrusu, 1 iyul 2017-ci il tarixinə çətinliklə) ayda 0,06 BTC çıxarıb. Lakin Bitcoin şəbəkəsinin mürəkkəbliyi durmadan artıb. 1 noyabr 2017-ci il tarixindən etibarən eyni avadanlıq artıq ayda 0,026 BTC istehsal edəcək. Mədənçinin gəliri cəmi 4 ayda yarıdan çox azalıb.

Lakin gəlirin hətta həftəlik azalması mədən investisiyalarını daha az cəlbedici etmir. Kriptovalyutada gəlir qismən fiata məzənnəsinin artması ilə kompensasiya edilir. Bizim nümunəmizdə, iyulun 1-də Bitcoin-in məzənnəsi 2400 dollar idi, noyabrın 1-də isə kotirovkalar təxminən 6700 dollara yüksəldi. Məlum olub ki, mədənçilik mürəkkəbliyinin sürətlə artmasına baxmayaraq, fiat mədənçilərinin gəlirləri artıb.

Bu, dinamik mürəkkəbliyə malik kriptovalyutaların yaradıcılarının məntiqidir. Və valyutanın qiyməti ilə onun minalanmasının nə qədər çətin olması arasında birbaşa əlaqə olmasa da, hələ də dolayı əlaqə var. Güman edilir ki, mürəkkəbliyin artması ümumi əhali arasında kriptovalyutanın populyarlığının artması deməkdir. Mərkəzləşdirilməmiş valyutalar haqqında öyrənən kimsə mina etməyə çalışacaq. Bu, mürəkkəbliyin artmasına səbəb olacaqdır. Amma eyni zamanda tələbin və deməli, məzənnənin artması ehtimalı yüksəkdir. Belə çıxır ki, cəmiyyətdə artan maraq həm valyuta məzənnəsinin artmasına, həm də mədən işlərinin mürəkkəbliyinin artmasına təkan verir.

Texniki baxımdan, mədənçilik çətinliyi göstəricisi aşağıdakılardan asılıdır:

  • şəbəkə hashrate (bütün madencilerin avadanlığının sayı və hesablama gücü);
  • 2016 bloklarının mədən sürəti;

Hər üç göstərici birbaşa əlaqəlidir. Şəbəkə həşratının artması o deməkdir ki, mədən sənayesinə yeni iştirakçıların qoşulması və rəqabətin artması. Mədənçilərin sayı artdıqca növbəti blokun axtarışına sərf olunan vaxt azalır. Blok 2016-dan sonra mədən çətinliyi yenidən hesablanır. Göstəricinin dəyişməsi aşağıdakı nümunə ilə təsvir olunur:

Bitcoin mədənçilik çətinliyi.

Mürəkkəbliyin artması bir-biri ilə sıx əlaqəli olan bir sıra amillərlə bağlıdır:

  • ASIC çiplərinin inkişafı və daha məhsuldar modellərin bazarına daxil olması;
  • Bitcoin-in populyarlaşması və yeni madencilerin axını;
  • dollara nisbətdə Bitcoin məzənnəsinin sürətli artımı səbəbindən mədənçilik sahəsinə qoyulan investisiyanın yüksək gəliri;
  • kotirovkaları Bitcoin-dən aşağı düşən və ya daha yavaş artan digər valyutalardan hesablama gücünün ötürülməsi;
  • digər amillər;

2016-cı ildən bəri Bitcoin mədənçiliyinin çətinliyi 5-6 dəfə artıb. Artım demək olar ki, fasiləsiz davam etdi. Yalnız 2017-ci ilin avqustunda bir il ərzində ilk dəfə olaraq göstəricidə azalma müşahidə olunub. Ola bilsin ki, buna bəzi madenciləri gücü altkoinlərə ötürməyə məcbur edən Bitcoin-in Avqust SegWit-i təsir edib.

Yəqin ki, siz O(log n) kimi qeydlərlə bir neçə dəfə rastlaşmısınız və ya bəzi alqoritmlərə ünvanlanmış “loqarifmik hesablama mürəkkəbliyi” kimi ifadələr eşitmisiniz. Və hələ də bunun nə demək olduğunu başa düşmürsənsə, bu məqalə sizin üçündür.

Çətinlik reytinqi

Alqoritmlərin mürəkkəbliyi adətən onların icra müddəti və ya yaddaşdan istifadə ilə ölçülür. Hər iki halda mürəkkəblik daxil edilən məlumatların ölçüsündən asılıdır: 100 elementdən ibarət massiv oxşar 1000-dən daha sürətli işlənəcək. Bununla belə, az adam dəqiq vaxtla maraqlanır: bu, prosessordan, məlumat növündən asılıdır. , proqramlaşdırma dili və bir çox başqa parametrlər. Yalnız asimptotik mürəkkəblik vacibdir, yəni giriş məlumatlarının ölçüsü sonsuzluğa meyilli olduqda mürəkkəblik.

Tutaq ki, bəzi alqoritm daxil edilmiş məlumatların n elementini emal etmək üçün 4n 3 + 7n şərti əməliyyatları yerinə yetirməlidir. n artdıqca, n-i kuba yüksəltməklə, onu 4-ə vurmaq və ya 7n əlavə etməkdənsə, son iş vaxtı əhəmiyyətli dərəcədə təsir edəcək. Sonra deyirlər ki, bu alqoritmin zaman mürəkkəbliyi O(n 3), yəni giriş məlumatlarının ölçüsündən kub olaraq asılıdır.

O kapitalının istifadəsi (və ya O-notasiyası adlanır) riyaziyyatdan gəlir, burada funksiyaların asimptotik davranışını müqayisə etmək üçün istifadə olunur. Formal olaraq, O(f(n)) o deməkdir ki, alqoritmin işləmə müddəti (və ya tutmuş yaddaşın miqdarı) daxil edilmiş məlumatların ölçüsündən asılı olaraq f(n) ilə vurulan bəzi sabitdən daha sürətli deyil.

Nümunələr

O(n) - xətti mürəkkəblik

Məsələn, çeşidlənməmiş massivdə ən böyük elementi tapmaq alqoritmi bu mürəkkəbliyə malikdir. Hansının maksimum olduğunu başa düşmək üçün massivin bütün n elementindən keçməli olacağıq.

O(log n) - loqarifmik mürəkkəblik

Ən sadə nümunə binar axtarışdır. Massiv çeşidlənibsə, yarıya bölünmə metodundan istifadə edərək onun müəyyən bir dəyərin olub olmadığını yoxlaya bilərik. Orta elementi yoxlayaq, əgər o, axtardığımızdan daha böyükdürsə, o zaman massivin ikinci yarısını atacağıq - o, mütləq orada deyil. Daha azdırsa, əksinə - ilkin yarısını atacağıq. Beləliklə, biz yarıya bölməyə davam edəcəyik və sonda log n elementləri yoxlayacağıq.

O(n 2) - kvadrat mürəkkəblik

Məsələn, daxil etmə çeşidləmə alqoritmi bu mürəkkəbliyə malikdir. Kanonik tətbiqdə o, iki iç-içə döngədən ibarətdir: biri bütün massivdən keçmək, ikincisi isə artıq çeşidlənmiş hissədə növbəti element üçün yer tapmaq üçün. Beləliklə, əməliyyatların sayı n * n, yəni n 2 kimi massivin ölçüsündən asılı olacaq.

Digər çətinlik dərəcələri var, lakin onların hamısı eyni prinsipə əsaslanır.

Həm də belə olur ki, alqoritmin işləmə müddəti heç də daxil olan məlumatların ölçüsündən asılı deyil. Sonra mürəkkəblik O(1) kimi işarələnir. Məsələn, massivin üçüncü elementinin qiymətini təyin etmək üçün elementləri yadda saxlamağa və ya onların arasından dəfələrlə keçməyə ehtiyac yoxdur. Həmişə yalnız giriş məlumat axınında üçüncü elementi gözləmək lazımdır və bu, istənilən məlumat miqdarını hesablamaq üçün eyni vaxt tələb edən nəticə olacaq.

Bu vacib olduqda yaddaş qiymətləndirmələri üçün də eynidir. Bununla belə, alqoritmlər giriş məlumatlarının ölçüsünü artırarkən digərlərindən daha çox yaddaş istifadə edə bilər, lakin yenə də daha sürətli işləyir. Və əksinə. Bu, mövcud şərtlərə və tələblərə əsaslanaraq problemlərin həllinin ən yaxşı yollarını seçməyə kömək edir.