# 4. Общая статистика print("\n" + "="*60) print("FINAL STATISTICS") print("="*60) print(f"Files checked (>=1KB): {all_files_count}") print(f"Duplicate files found: {total_dup_files}") print(f"Total space to reclaim: {format_size(total_waste_space)}") print("="*60) if name == "main": try: main() except KeyboardInterrupt: print("\nProcess interrupted by user.") sys.exit(1) ` ### Как работает этот скрипт: 1. Фильтрация по размеру (Оптимизация): Скрипт не считает хеш для каждого файла. Сначала он создает словарь, где ключом является размер файла. Если в системе есть только один файл размером `12345` байт, он гарантированно уникален, и считать его SHA-256 не нужно. 2. Безопасное чтение: Функция `get_file_hash` читает файлы блоками по 64 КБ. Это значит, что если вы встретите файл размером 10 ГБ, скрипт не «съест» всю вашу оперативную память. 3. Игнорирование мелких файлов: Согласно требованию, файлы меньше 1 КБ пропускаются. 4. Прогресс-бар: Реализован с помощью `sys.stdout.write` и возврата каретки `\r`, что позволяет обновлять одну и ту же строку в консоли без использования сторонних библиотек. 5. Расчет экономии: Программа считает "мусорное" пространство как `размер_файла * (количество_копий - 1)`. То есть один экземпляр файла считается полезным, а остальные — лишними. ### Сложность и производительность: - Временная сложность: $O(N)$ для обхода файлов и $O(M)$ для хеширования, где $M$ — только те файлы, что имеют одинаковый размер. - Память: $O(N)$ для хранения путей к файлам в словаре.