Найти Π² Π”Π·Π΅Π½Π΅
pro Python

πŸš€ Π‘Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈΠ½Π³: сдСлай свой ΠΊΠΎΠ΄ быстрСС

πŸš€ Π‘Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈΠ½Π³: сдСлай свой ΠΊΠΎΠ΄ быстрСС πŸ”₯ Π‘Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈΠ½Π³ - это ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ‚Π²ΠΎΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°. Π”Π²Π΅ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ β€” разная ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ: # РСкурсивная: fibonacci(30) = 73 мс 🐒 # Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½Π°Ρ: fibonacci(200) = 0 нс πŸš€ Π Π°Π·Π½ΠΈΡ†Π° Π² ~∞ Ρ€Π°Π·! Π‘Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π½Π°ΠΉΡ‚ΠΈ тяТСлыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. ✨ Π“Π»Π°Π²Π½Ρ‹ΠΉ инструмСнт: pytest-codspeed β€” просто добавь Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€: @pytest.mark.benchmark def test_fib_bench(): result = fibonacci(30) assert result == 832040 πŸ’‘ ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·Π°Ρ†ΠΈΡ β€” сравни Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹: @pytest.mark.benchmark @pytest.mark.parametrize("n", [5, 10, 15, 20, 30]) def test_fib_parametrized(n): result = fibonacci(n) assert result > 0 Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΡΠΊΡΠΏΠΎΠ½Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ O(2^n) πŸ“ˆ ΠžΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ тСсты ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°, Π° Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈ ΠΈΠ·ΠΌΠ΅Ρ€ΡΡŽΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния ΠΏΠΎΠ΄ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π²Ρ…ΠΎΠ΄Π°ΠΌΠΈ, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΈ настройками окруТСния. πŸ”— Полная ΡΡ‚Π°Ρ‚ΡŒΡ

πŸš€ Π‘Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈΠ½Π³: сдСлай свой ΠΊΠΎΠ΄ быстрСС

πŸ”₯ Π‘Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈΠ½Π³ - это ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ‚Π²ΠΎΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°.

Π”Π²Π΅ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ β€” разная ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ:

# РСкурсивная: fibonacci(30) = 73 мс 🐒

# Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½Π°Ρ: fibonacci(200) = 0 нс πŸš€

Π Π°Π·Π½ΠΈΡ†Π° Π² ~∞ Ρ€Π°Π·! Π‘Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π½Π°ΠΉΡ‚ΠΈ тяТСлыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄.

✨ Π“Π»Π°Π²Π½Ρ‹ΠΉ инструмСнт: pytest-codspeed β€” просто добавь Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€:

@pytest.mark.benchmark

def test_fib_bench():

result = fibonacci(30)

assert result == 832040

πŸ’‘ ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·Π°Ρ†ΠΈΡ β€” сравни Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹:

@pytest.mark.benchmark

@pytest.mark.parametrize("n", [5, 10, 15, 20, 30])

def test_fib_parametrized(n):

result = fibonacci(n)

assert result > 0

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΡΠΊΡΠΏΠΎΠ½Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ O(2^n) πŸ“ˆ

ΠžΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ тСсты ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°, Π° Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈ ΠΈΠ·ΠΌΠ΅Ρ€ΡΡŽΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния ΠΏΠΎΠ΄ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π²Ρ…ΠΎΠ΄Π°ΠΌΠΈ, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΈ настройками окруТСния.

πŸ”— Полная ΡΡ‚Π°Ρ‚ΡŒΡ