Всем привет, недавно наткнулся на интересный тред: https://xss.pro/threads/122300/
ТС же в нем очень перемудрил с алгоритмом на мой взгяд, но это не то что меня заинтересовало. Как реализовать такой функционал на C# (Знаю только Паскаль, Шарп, и Петухон
) мне понятно, а вот как сделать это быстро интерпретатором очень интересная задача, так что решил создать тред где буду размещать придуманные мной алгоритмы на ЯП этого раздела.
Продолжу этот тред здесь:
В целом получилось чуть больше 108 миллионов строк, размер ОЗУ моей системы 32 гигабайта (в пике потребление по диспетчеру задач у скрипта в районе 12-14 гигабайт). На обработку скрипта ушло:
На выходе получилось как-то так:
ТС же в нем очень перемудрил с алгоритмом на мой взгяд, но это не то что меня заинтересовало. Как реализовать такой функционал на C# (Знаю только Паскаль, Шарп, и Петухон
) мне понятно, а вот как сделать это быстро интерпретатором очень интересная задача, так что решил создать тред где буду размещать придуманные мной алгоритмы на ЯП этого раздела.Продолжу этот тред здесь:
Очень интересная задача для питона, я подумаю на досуге за алгоритм сортировки и удаления дублей в большом файле без критичного потребления ОЗУ. Всё что пока пришло на ум для быстрой очистки от дублей это применить функцию set (множества элементов) в списке, сгенерировал файл с дублями в объеме до 2 гигов (точный размер 1.84гб) такого вида:Больше 1gb к примеру. Что бы сортировать такие файлы одного .readlines() будет маловато.
Еще не понятно, что есть юзернеймы? Какой формат строк должен быть?
username? email:pass? разделитель?
В целом получилось чуть больше 108 миллионов строк, размер ОЗУ моей системы 32 гигабайта (в пике потребление по диспетчеру задач у скрипта в районе 12-14 гигабайт). На обработку скрипта ушло:
На выходе получилось как-то так:
main.py
Python:
import time
name_file = "bd_dublicate.txt" # Передаю имя исходного файла
tic = time.perf_counter() # Запускаем таймер и вычисляем время работы скрипта в секундах
# Чтение файла
with open(name_file, 'r', encoding='utf-8') as file:
f = file.read()
# Разделение строк
total = f.split('\n')
# Удаление дубликатов
unique_lines = list(set(total))
#print(unique_lines)
# Подсчет удаленных строк
print(len(total) - len(unique_lines), 'всего удалённых строк')
# Запись уникальных строк в новый файл
with open("output.txt", 'w', encoding='utf-8') as output_file:
output_file.write('\n'.join(unique_lines))
print("Файл успешно сохранен.")
tac = time.perf_counter()
print(f"Удаление дублей заняло {tac - tic:0.4f} секунд")
Можно попробовать файл поделить на несколько частей, к примеру по 2 гигабайта, пройтись по ним алгоритмом выше в цикле, а потом объединить всё в один файл, но это в теории. Пока не имею возможности сгенерировать такой объем для проверки этой теории. Ну и также на границе смещения могут быть дубли при таком подходе.У меня есть АП ULP и вариант им почистить его от дублей? 500гб вес... за*бался искаться софт для удаление дублей в ULP