--------------------------------------------------------------------------------------

Verze kódu: git commit 526bbff1667b08aec0aca88b3173529281ae9d0d
Python: 3.12.3
OS/jádro: Linux 14~24.04.1-Ubuntu 6.17.0-14-generic
CPU: AMD Ryzen 7 5700U with Radeon Graphics
Úložiště: NVMe SSD, ext4
Závislosti: mathlib.py, profiling.py, error.py
Nástroje: cProfile (vestavěný v Pythonu 3.12.3), snakeviz 2.2.2
Tvorba testovacích vstupů: python3 generate_inputs.py
Spuštění: python3 -m cProfile -o profile.stats profiling.py < <soubor s čísly>
Zpracování výsledků: snakeviz profile.stats nebo python3 print_stats_precise.py profile.stats

--------------------------------------------------------------------------------------

Vstup o velikosti 10 čiselných hodnot 

Program tráví nejvíce času importem knihovní funkce <frozen importlib._bootstrap>:1349(_find_and_load) (0.00146 s)
Pokud je nebudeme započítávat, pak program tráví nejvíce času (0.000134 s) ve funkci calculate_sample_stddev

--------------------------------------------------------------------------------------

Vstup o velikosti 10^3 čiselných hodnot 

Program tráví nejvíce času (0.004305 s) ve funkci calculate_sample_stddev

--------------------------------------------------------------------------------------

Vstup o velikosti 10^6 čiselných hodnot 

Program tráví nejvíce času (3.99 s) ve funkci calculate_sample_stddev

Nejlépe se zaměřit v každém případě na optimizaci algoritmu výpočítání směrodatné odchýlky 

--------------------------------------------------------------------------------------

#print_stats_precise.py

import pstats
import sys

p = pstats.Stats(sys.argv[1])
p.strip_dirs()
p.sort_stats("tottime")  

print(f"{'tottime':>12} {'cumtime':>12} {'ncalls':>8} {'percall':>12} function")
print("-" * 80)

for func, (cc, nc, tt, ct, _) in p.stats.items():
    percall = tt / nc if nc > 0 else 0.0
    print(f"{tt:12.6f} {ct:12.6f} {nc:8} {percall:12.6f} {func}")

--------------------------------------------------------------------------------------

#generate_inputs.py 

import os
import random

def write_numbers(path: str, n: int, seed: int = 12345):
    rnd = random.Random(seed)
    os.makedirs(os.path.dirname(path), exist_ok=True)
    with open(path, "w", encoding="utf-8") as f:
        per_line = 10
        for i in range(n):
            x = rnd.uniform(-50000.0, 50000.0)
            f.write(f"{x}")
            if (i + 1) % per_line == 0:
                f.write("\n")
            else:
                f.write(" ")


def main():
    write_numbers("profiling/input_10.txt", 10)
    write_numbers("profiling/input_1e3.txt", 1_000)
    write_numbers("profiling/input_1e6.txt", 1_000_000)


if __name__ == "__main__":
    main()

--------------------------------------------------------------------------------------
