Я бы хотел узнать, что будет быстрее:
Проблема в том, что я принимаю файлы с числами типа double, и мне надо их записывать отсортированными уже в другой файл и надо делать это быстро. Файлы имеют минимальный размер 1ГБ. Использую язык C++. Также надо учитывать наихудшие варианты.
Динамическое бинарное дерево займёт в памяти огромное количество памяти для ссылок (три штуки) и баланс. Миллиардные попытки выделить память для каждого узла займёт времени на всю область вашего терпения. Можно конечно первым проходом посчитать количество данных в файле и выделить одноразово память для массива узлов деревьев. Но намного проще выделить память в три раза меньше для обычного массива данных и произвести быструю сортировку. Результат: подсчёт количества данных, запись в обычный массив, quick-sort.
Быстрее будет сортировка в массиве. Меньше промахов в кэше, меньше расход памяти, да и быстрая сортировка STL работает очень хорошо. Миллионы чисел сортируются за секунды.
Если у вас есть возможность узнать, сколько элементов хранится в памяти, то могу посоветовать заранее выделить необходимо количество памяти в массиве. В случае использования std::vector, это будет функция reserve или сразу передать в конструктор необходимое количество элементов.
Что касается считывания, то стоит помнить, что данные все равно подгружаются из буфера (т.е. из файла загружается какая-то часть в буфер, например, 4КБ, а потом читается с буфера, когда вы используете считывание), поэтому происходит считывание достаточно быстро.
И ещё одна вещь, которая может сэкономить вам память и увеличить скорость. Это если в файле они хранятся в бинарном виде, а не в текстовом. Это также позволит узнать, сколько чисел хранится в файле и потом выделить память.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
По заданию нужно реализовать очередь с приоритетом в виде спискаВозникла проблема при добавлении элементов в середину списка так чтобы...
При выходе за пределы динамического массива программа впервые вместо вылета с ошибкой 0xC0000005 выводит "once (адрес) is (значение)"Из-за чего это...
Есть необходимость переопределить видимость метода наследуемого от базового, или запретить его переопределение
Примерно продумал синтаксис, но выводит число неправильноАлгоритм такой: число оставить без его целой части, далее умножать на 10 до тех пор,...