|
Обжать GUID до 9 символов? | ☑ | ||
---|---|---|---|---|
0
ИС-2
naïve
17.04.19
✎
15:57
|
Можно сократить размер гуида до 9 символов, но сохранив его уникальность. Из курса универа помню, что есть (код Рида-Соломона?), но конретно уже не помню какой
|
|||
1
Asmody
17.04.19
✎
16:02
|
GUID - это 32х разрядное 36тиричное число. Т.е. GUIDов может быть 36^32.
Теперь думай |
|||
2
Мыш
17.04.19
✎
16:05
|
||||
3
MM
17.04.19
✎
16:06
|
(1) Не идеальный подсчёт. Гуид 128-битный идентификатор. Делим его на 16 бит доступных для Юникод символов (автор не уточнил каких символов), получаем длину в символах 8. Хотя есть дополнительные плоскости Юникод там можно ещё короче.
|
|||
4
Garykom
гуру
17.04.19
✎
16:15
|
(0) Код Рида-Соломона это сильно из другой оперы.
В общем случае не получится до 9 символов сократить без использования некой внешней базы. В частных изучай сравнивай гуиды имеющиеся между собой и ищи закономерности, одинаковые последовательности. Их можно сжать каким то алгоритмом https://ru.wikipedia.org/wiki/Сжатие_без_потерь |
|||
5
Garykom
гуру
17.04.19
✎
16:16
|
(4)+ Я бы одинаковые длинные последовательности кодировал https://ru.wikipedia.org/wiki/Код_Хаффмана
|
|||
6
Мыш
17.04.19
✎
16:21
|
(5) 128 бит сложно хаффманом.
|
|||
7
Asmody
17.04.19
✎
16:26
|
Да, фигню сказал. Но логика не меняется: 2^(128/9) ~ 19113
Т.е. нужно, чтобы каждый символ мог принимать 19113 значения. |
|||
8
Garykom
гуру
17.04.19
✎
16:27
|
(6) Если там в 128 аж 50-100 бит повторяются то ничего сложного, один символ по сути по Хаффману.
Понято для раскодирования обратно в длинный/полный гуид нужно словарик сохранять. Но после сжатия значения останутся уникальными. |
|||
9
Garykom
гуру
17.04.19
✎
16:28
|
(8)+ Т.е. берем этот набор гуидов и ищем у них наибольшие общие подпоследовательности, выписываем их в общий словарик.
Затем кодируем по Хаффману эти подпоследовательности (слова) и заменяем в исходных гуидах на короткий битовый код по Хаффману. |
|||
10
Мыш
17.04.19
✎
16:29
|
(8) > Если там в 128 аж 50-100 бит повторяются
Вот это "если" всё портит. Т.е. результат не гарантирован. Со словарем всё понятно, хранится в коде. |
|||
11
Garykom
гуру
17.04.19
✎
16:30
|
(10) Ну да я сразу написал что "В общем случае не получится" и "В частных изучай сравнивай гуиды"
|
|||
12
Кодер
17.04.19
✎
16:33
|
Полностью не получится, мощности множеств (я вообще правильно использую буквы?) различаются на 28 десятичных порядков. 21 против 49. Но до некоторой поры при использовании своего списка это сработает.
|
|||
13
Cyberhawk
17.04.19
✎
16:35
|
Как это и сократить, и сохранить уникальность? Трехзначных чисел 999 штук, а двузначных всего 99
|
|||
14
Cyberhawk
17.04.19
✎
16:36
|
Видимо речь о расширении допустимых значений, которые может принимать каждый символ?
|
|||
15
Cyberhawk
17.04.19
✎
16:37
|
Ну т.е. трехзначных чисел 999, каждое из которых можно представить в виде двух символов, но уже не цифры будут
|
|||
16
Garykom
гуру
17.04.19
✎
16:37
|
(13) Чтобы дублей после сокращения не было.
Не факт что из трехзначных все 999 использованы чисел, возможно меньше <99 но разбросаны в диапазоне 1-999 |
|||
17
1Сергей
17.04.19
✎
16:39
|
Мне странно, что этот вопрос периодически всплывает
|
|||
18
Cyberhawk
17.04.19
✎
16:40
|
(16) Так наверное не статичную коллекцию УИДов сократить надо, а любой произвольный?
|
|||
19
Garykom
гуру
17.04.19
✎
16:41
|
(18) Любой произвольный нельзя сократить, они и так являются сокращением с допустимой малой вероятностью появления дублей.
|
|||
20
Cyberhawk
17.04.19
✎
16:42
|
(19) Почему нельзя? Вон в (7) даже посчитали, Я про это походу и говорил в (14) :)
|
|||
21
MM
17.04.19
✎
16:45
|
(7) Можно если символы Юникодные )
|
|||
22
Сияющий в темноте
17.04.19
✎
20:30
|
гуид это 16 байт информации,там,правда,есть поле версии и т.п.,но им можно пренебречь.
16 байт генерятся по псевдослучайному алгоритму с добавлением отметки времени,так что в общем случае сжать сложно. 9 символов в 1с,это 9*2 то есть 18 байт. так что,пробуйте,но если где то попадутся однобайтовые символы или преобразование кодировок,то будет фигня. |
|||
23
Конструктор1С
18.04.19
✎
03:25
|
А зачем такие извращения?
|
|||
24
arsik
гуру
18.04.19
✎
07:35
|
(23) Ну скорее всего внешняя система требует ИД документа или справочника. И длинна этого поля 9 символов. Вот и хочется засунуть гуид объекта в эти 9 символов.
|
|||
25
Конструктор1С
18.04.19
✎
08:13
|
(24) для этого не обязательно извращаться загибанием гуида. Достаточно добавить во внешней системе поле типа VARCHAR(36), а свой ид пускай генерит сама.
|
|||
26
ИС-2
naïve
18.04.19
✎
08:48
|
интересно по какому алгоритму для сайтов делается краткое название. Напримеh http://www.namesite.ru/XHYtQ
|
|||
27
arsik
гуру
18.04.19
✎
09:41
|
(25) :) И как ты во внешнюю, то есть не принадлежащую тебе систему, добавишь поле или изменишь существующее :)
|
|||
28
Конструктор1С
18.04.19
✎
19:13
|
(25) не я это буду делать, а владельцы системы.
|
|||
29
Cyberhawk
18.04.19
✎
19:28
|
(28) Это слишком простое и в определенных случаях неоптимальное решение, несмотря на его "правильность" / фен-шуй :)
|
|||
30
Конструктор1С
19.04.19
✎
08:51
|
(29) дык, извращаться с гуидом куда менее оптимальное решение
|
|||
31
Конструктор1С
19.04.19
✎
08:51
|
Ладно, фиг с ним. Кто у кого будет получать данные? Обмен односторонний или двусторонний?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |