Nəzəriyyə "n böyüdükcə vaxt necə artır?" sualına cavab verir, ölçmə isə konkret maşında konkret vaxtı göstərir. Yaxşı mühəndis hər ikisini birləşdirir: təhlildən gözlənti çıxarır, ölçmə ilə yoxlayır. Bu dərsdə mürəkkəbliyi eksperimentlə yoxlamaq üçün kiçik alətlər quracağıq.
Ölçmə protokolu
nüçün ölçüləri seçin və hər dəfə ikiqat artırın:n, 2n, 4n, ....- Giriş verilənlərini taymerdən kənarda hazırlayın.
- Hər ölçü üçün bir neçə dəfə təkrarlayın və minimumu götürün: ən az küylüdür.
T(2n) / T(n)nisbətini və ya log-log meylini hesablayın.- Nəticəni nəzəri gözləntiyə uyğunlaşdırın.
| Mürəkkəblik | T(2n) / T(n) gözləntisi | log-log meyl |
|---|---|---|
O(1) | ≈ 1 | 0 |
O(log n) | ≈ 1 (bir az çox) | ≈ 0 |
O(n) | 2 | 1 |
O(n log n) | 2-dən bir az çox | 1-dən bir az çox |
O(n^2) | 4 | 2 |
O(n^3) | 8 | 3 |
O(2^n) | T(n + 1) / T(n) = 2 | xətt yoxdur |
Benchmark funksiyası və nisbətlər
bench təkrarlardan ən yaxşısını qaytarır. ratio ölçünü ikiqat artıranda vaxtın neçə dəfə artdığını göstərir. Nəticələr maşından asılıdır, buna görə cavabı dəqiq saniyələrlə yox, aralıqla yoxlayırıq.
import random
from time import perf_counter