Pull to refresh

Comments 10

Не совсем понял, с каким проектом? Все примеры кода, касающиеся темы, приведены в статье

Просто я бы хотел скачать репу с проектом и тыкать в него. Сейчас мне нужно приложить усилия, чтобы перенести код и подготовить тестовые данные

В проекте эти алгоритмы довольно сильно привязаны к визуалу на WPF, так что для статьи я их подчистил. Очень не уверен, что ты хочешь сидеть и разбираться в том коде.

Но замечание к сведению принял, так что в следующий раз сделаю небольшой проектик для статьи)

Понял

Просто обычно к подобным статьям прикладывают репу с кодом и у меня возникли неоправдавшиеся ожидания

Вообще я хотел порефачить код, т.к. в коде много технических деталей и, кажется, можно повысить уровень абстракции, чтобы алгоритм был более явным.

На самом деле, был бы очень признателен, если что-то подправишь в коде. Потому что я понимаю, что он не идеален, но и сейчас почти нет времени его улучшить

Теперь метод для слияния записей из трёх файлов. Он у меня получился довольно громоздким (из-за проверок исключительных ситуаций, например, при конце серии в одном или двух из подфайлов). Поэтому буду рад предложениям по улучшению читаемости кода и оптимизации сортировок в комментариях.

Самое простое: сложить данные в массивы, readers, elements, counters
Тогда вместо свича будет доступ по индексу.
Второе: объединить варианты конца файла и конца серии. Все равно при поиске минимального элемента учитывается возможность null

Слишком много букаф, может кто-нибудь объяснить что этот алгоритм/алгоритмы делают в кратце?

Всего лет 60 назад, стандартная внешняя сортировка на IBM/360 выделяла буфер в памяти. Из входного файла или call-back функции считывалось столько записей, сколько помещалось в этом буфере. После чего указатели на записи в буфере сортировались обычным QuickSort. Записи из буфера записывались в промежуточный файл в отсортированном порядке. Следующий отсортированный блок записывался в другой файл. А следующий - опять в первый. По окончании сортировки блоков, переходили к фазе слияния уже отсортированных блоков.

С тех пор мало что изменилось и стандартная *nix команда sort работает по такому же принципу.

Теперь метод для слияния записей из трёх файлов. Он у меня получился довольно громоздким (из-за проверок исключительных ситуаций, например, при конце серии в одном или двух из подфайлов). Поэтому буду рад предложениям по улучшению читаемости кода и оптимизации сортировок в комментариях.

Можно делать слияние в цикле до тех пор, пока все три цепочки содержат элементы. Тогда внутри цикла не нужно будет проверок цепочек на окончание. А когда одна из цепочек закончится, то переключаться на слияние двух цепочек.

Sign up to leave a comment.

Articles