Оптимизация производительности
Бенчмаркинг алгоритмов проверки простых чисел
Анализ временной сложности
import timeit
import sys
def basic_prime_check(n):
if n < 2:
return False
for i in range(2, n):
if n % i == 0:
return False
return True
def optimized_prime_check(n):
if n < 2:
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True
Сравнение производительности
graph TD
A[Prime Checking Performance] --> B[Input Size]
A --> C[Algorithm Efficiency]
B --> D[Small Numbers]
B --> E[Large Numbers]
C --> F[Time Complexity]
C --> G[Space Complexity]
Методы бенчмаркинга
def benchmark_prime_methods():
test_numbers = [10, 100, 1000, 10000]
results = []
for num in test_numbers:
basic_time = timeit.timeit(lambda: basic_prime_check(num), number=1000)
optimized_time = timeit.timeit(lambda: optimized_prime_check(num), number=1000)
results.append({
'Number': num,
'Basic Method Time': basic_time,
'Optimized Method Time': optimized_time,
'Improvement (%)': ((basic_time - optimized_time) / basic_time) * 100
})
return results
## Print benchmarking results
for result in benchmark_prime_methods():
print(result)
Стратегии оптимизации
| Стратегия |
Описание |
Влияние на производительность |
| Ограничение по квадратному корню |
Проверять делители до √n |
Значительное ускорение |
| Ранняя остановка |
Прекращать проверку при нахождении первого делителя |
Сокращение ненужных итераций |
| Кэширование |
Хранение ранее вычисленных результатов проверки на простоту |
Сокращение избыточных вычислений |
Продвинутые техники оптимизации
def cached_prime_check():
## Implement memoization for prime checking
cache = {}
def is_prime(n):
if n in cache:
return cache[n]
if n < 2:
cache[n] = False
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
cache[n] = False
return False
cache[n] = True
return True
return is_prime
## Create cached prime checker
prime_checker = cached_prime_check()
Оптимизация памяти
def memory_efficient_prime_generator(limit):
## Use generator for memory-efficient prime generation
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True
return (num for num in range(2, limit) if is_prime(num))
## Example usage
primes = list(memory_efficient_prime_generator(100))
print(primes)
Основные принципы оптимизации
- Сократить ненужные вычисления
- Использовать эффективные алгоритмы
- Реализовать механизмы кэширования
- Учитывать размер и сложность входных данных
В LabEx мы подчеркиваем важность алгоритмической эффективности при проверке простых чисел.
Метрики производительности
- Временная сложность
- Пространственная сложность
- Масштабируемость
- Вычислительные накладные расходы
Заключение
Эффективная проверка простых чисел требует сбалансированного подхода между алгоритмической эффективностью и практической реализацией.