русский
Germany.ruForen → Архив Досок→ Programmierung

Спецы ассемблера

12.04.23 11:32
Re: Спецы ассемблера
 
Программист коренной житель
in Antwort Muenchausen 12.04.23 10:21
А почему играет роль одинаковая длина ?

Потому что

1) в строках одинаковой длины легче навигация

2) строки одинаковой длины проще менять местами

Пример:

AAAA

DDDD

CCCC

BBBB


против

AA

DDD

BBBB

C


Очевидно, что в 1-ом случае для того, чтобы узнать начало какой-либо строки надо знать просто номер этой строки. Во втором случае для того, чтобы узнать начало 3-й строки нужно прочитать первые две (ну или построить индексный файл и хранить там начало и длину каждой строки).

С сортировкой все еще забавнее. Если для перестановки 2-й и 4-й строк понадобится всего 2 операции записи, то во стором случае понадобится 3 операции записи, при этом 3-я операция - это все, что между 2-й и 4-й строчкой. Т.е. если у тебя 1млн строк и ты хочешь поменять местами 2-ю и предпоследнюю строки, то ты перезапишешь практически весь файл. А чтение и запись - это очень медленные операции.


Я читал что при сортировке оно берет например первую строку и сравнивает со всеми следующими снизу, тоесть 870 млн сравниваний. Итого имеем прогрессию как бы ( 1+870млн)/2 × 870 млн что грубо равно 900 млн х 400 млн = 36000000 млн млн или 36 млн млн млн операций , это же куча времени !

Это не самый быстрый алгоритм :)

Есть более эффективные сортировки: https://www.toptal.com/developers/sorting-algorithms


 

Sprung zu