?

Log in

No account? Create an account
nyaload

Журнал Пушыстого

Журнал Пушыстого

Previous Entry Share Next Entry
numbers sort, lexicographic order
nyaload
_winnie
Лексикографическая("алфавитная") сортировка чисел расставляет их в неправильном порядке:
1000000
20
21
3
3.14159
4

Миллион стоит перед 20 потому что первая цифра 1 меньше 2.

Что бы лексикографическая сортировка для строковых представлений положительных чисел была правильной, можно дописать перед числом достаточно много нулей, напр. 20 нулей (коллега расказал про хак: использовать пробелы вместо нулей).
00000000000000000003
00000000000000000003.14159
00000000000000000004
00000000000000000020
00000000000000000021
00000000000001000000


Придумал ещё способ. Для сохранения зрения и места в файлах - дописать перед числом количество цифр в нем, а не нули. Двумя цифрами, 01, 02, 03, .. 99. Числа с 10-ю цифрами иногда попадаются в измерениях (миллиарды), а с сотней - уже нет.
01|3
01|3.14159
01|4
02|20
02|21
07|1000000


Можно заменить на букву, от а до z, ещё более сжато получается:
b 3
b 3.14159
b 4
c 20
c 21
h 1000000


Ну и оставить от второго числа только нужные значащие цифры, напр. 3.

b3
b314
b4
c2
c21
h1


Что бы не слишком сильно шокировать окружающих, можно писать в виде, похожем на стандартный экспоненциальный:
e06*1.0
e00*3.14


  • 1
C длиной классно придумано. Не знал

может сначала по длине до запятой сортировать, а потом алфавитную?

У меня есть тулза, которая быстро сортирует терабайт. Но только строки.

И ещё это может пригодится например для именования файлов, где часто нет возможности влиять на сортировку.

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

А вот это быстрее будет чем таки посчитать число? Мне не очевидно.

Таки я совсем перестал понимать, а для чего это? Чтобы сохранить удобочитаемость обретя правильность сортировки? Так нету там удобочитаемости, кроме как в самом первом варианте с лидирующими нулями.

Это способы записи чисел в экспоненциальной и обычной форме, так что бы их сортировка как строк давала естественный результат. Кому-то кстати больше экспоненциальная форма больше нравится, кто много с вычислениями работает.

>Так нету там удобочитаемости, кроме как в самом первом варианте с лидирующими нулями

b 3
b 3.14159
b 4
c 20
c 21
h 1000000


00000000000000000003
00000000000000000003.14159
00000000000000000004
00000000000000000020
00000000000000000021
00000000000001000000



Экспонента в том или ином виде перед числом - даёт нужную сортировку, почти не снижая читаемость. win-win по всем параметрам (восприятие, размер файла, нужный порядок сортировки).

Дальше уже можно варьировать ползунок между читаемостью и сжатостью. Экспоненциальный или обычный вид - выбирается по вкусу.


> Для сохранения зрения и места в файлах - дописать перед числом количество цифр в нем, а не нули.

В jpeg так, кстати (не для сохранения зрения, конечно).

> Числа с 10-ю цифрами иногда попадаются в измерениях (миллиарды), а с сотней - уже нет.

Вместе с порядком числа можно ещё хранить порядок порядка.

Re: Order of magnitude

>Вместе с порядком числа можно ещё хранить порядок порядка.

Если не выходить за пределы ascii и десятичной системы счисления, то вроде не даёт выгоды, только усложняет

Re: Order of magnitude

> В jpeg так, кстати
в jpeg huffman

Что люди не делают, лишь бы не пользоваться sort -n.

Причём начало этой благородной лени положил ещё автор sort -n. ;)

Это не про sort, sort не умеет прожевать 40 терабайт.

  • 1