Вход | Регистрация
 

Обжать GUID до 9 символов?

Обжать GUID до 9 символов?
Я
   ИС-2
 
17.04.19 - 15:57
Можно сократить размер гуида до 9 символов, но сохранив его уникальность. Из курса универа помню, что есть (код Рида-Соломона?), но конретно уже не помню какой
 
 
   Asmody
 
1 - 17.04.19 - 16:02
GUID - это 32х разрядное 36тиричное число. Т.е. GUIDов может быть 36^32.
Теперь думай
   Мыш
 
2 - 17.04.19 - 16:05
   MM
 
3 - 17.04.19 - 16:06
(1) Не идеальный подсчёт. Гуид 128-битный идентификатор. Делим его на 16 бит доступных для Юникод символов (автор не уточнил каких символов), получаем длину в символах 8. Хотя есть дополнительные плоскости Юникод там можно ещё короче.
   Garykom
 
4 - 17.04.19 - 16:15
(0) Код Рида-Соломона это сильно из другой оперы.

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

Их можно сжать каким то алгоритмом https://ru.wikipedia.org/wiki/Сжатие_без_потерь
   Garykom
 
5 - 17.04.19 - 16:16
(4)+ Я бы одинаковые длинные последовательности кодировал https://ru.wikipedia.org/wiki/Код_Хаффмана
   Мыш
 
6 - 17.04.19 - 16:21
(5) 128 бит сложно хаффманом.
   Asmody
 
7 - 17.04.19 - 16:26
Да, фигню сказал. Но логика не меняется: 2^(128/9) ~ 19113
Т.е. нужно, чтобы каждый символ мог принимать 19113 значения.
   Garykom
 
8 - 17.04.19 - 16:27
(6) Если там в 128 аж 50-100 бит повторяются то ничего сложного, один символ по сути по Хаффману.
Понято для раскодирования обратно в длинный/полный гуид нужно словарик сохранять.
Но после сжатия значения останутся уникальными.
   Garykom
 
9 - 17.04.19 - 16:28
(8)+ Т.е. берем этот набор гуидов и ищем у них наибольшие общие подпоследовательности, выписываем их в общий словарик.
Затем кодируем по Хаффману эти подпоследовательности (слова) и заменяем в исходных гуидах на короткий битовый код по Хаффману.
   Мыш
 
10 - 17.04.19 - 16:29
(8) > Если там в 128 аж 50-100 бит повторяются
Вот это "если" всё портит. Т.е. результат не гарантирован.
Со словарем всё понятно, хранится в коде.
   Garykom
 
11 - 17.04.19 - 16:30
(10) Ну да я сразу написал что "В общем случае не получится" и "В частных изучай сравнивай гуиды"
   Кодер
 
12 - 17.04.19 - 16:33
Полностью не получится, мощности множеств (я вообще правильно использую буквы?) различаются на 28 десятичных порядков. 21 против 49. Но до некоторой поры при использовании своего списка это сработает.
   Cyberhawk
 
13 - 17.04.19 - 16:35
Как это и сократить, и сохранить уникальность? Трехзначных чисел 999 штук, а двузначных всего 99
   Cyberhawk
 
14 - 17.04.19 - 16:36
Видимо речь о расширении допустимых значений, которые может принимать каждый символ?
   Cyberhawk
 
15 - 17.04.19 - 16:37
Ну т.е. трехзначных чисел 999, каждое из которых можно представить в виде двух символов, но уже не цифры будут
   Garykom
 
16 - 17.04.19 - 16:37
(13) Чтобы дублей после сокращения не было.
Не факт что из трехзначных все 999 использованы чисел, возможно меньше <99 но разбросаны в диапазоне 1-999
   1Сергей
 
17 - 17.04.19 - 16:39
Мне странно, что этот вопрос периодически всплывает
   Cyberhawk
 
18 - 17.04.19 - 16:40
(16) Так наверное не статичную коллекцию УИДов сократить надо, а любой произвольный?
   Garykom
 
19 - 17.04.19 - 16:41
(18) Любой произвольный нельзя сократить, они и так являются сокращением с допустимой малой вероятностью появления дублей.
   Cyberhawk
 
20 - 17.04.19 - 16:42
(19) Почему нельзя? Вон в (7) даже посчитали, Я про это походу и говорил в (14) :)
   MM
 
21 - 17.04.19 - 16:45
(7) Можно если символы Юникодные )
   Сияющий в темноте
 
22 - 17.04.19 - 20:30
гуид это 16 байт информации,там,правда,есть поле версии и т.п.,но им можно пренебречь.
16 байт генерятся по псевдослучайному алгоритму с добавлением отметки времени,так что в общем случае сжать сложно.

9 символов в 1с,это 9*2 то есть 18 байт.
так что,пробуйте,но если где то попадутся однобайтовые символы или преобразование кодировок,то будет фигня.
   Конструктор1С
 
23 - 18.04.19 - 03:25
А зачем такие извращения?
   arsik
 
24 - 18.04.19 - 07:35
(23) Ну  скорее всего внешняя система требует ИД документа или справочника. И длинна этого поля 9 символов. Вот и хочется засунуть гуид объекта в эти 9 символов.
   Конструктор1С
 
25 - 18.04.19 - 08:13
(24) для этого не обязательно извращаться загибанием гуида. Достаточно добавить во внешней системе поле типа VARCHAR(36), а свой ид пускай генерит сама.
   ИС-2
 
26 - 18.04.19 - 08:48
интересно по какому алгоритму для сайтов делается краткое название. Напримеh http://www.namesite.ru/XHYtQ
   arsik
 
27 - 18.04.19 - 09:41
(25) :) И как ты во внешнюю, то есть не принадлежащую тебе систему, добавишь поле или изменишь существующее :)
   Конструктор1С
 
28 - 18.04.19 - 19:13
(25) не я это буду делать, а владельцы системы.
   Cyberhawk
 
29 - 18.04.19 - 19:28
(28) Это слишком простое и в определенных случаях неоптимальное решение, несмотря на его "правильность" / фен-шуй :)
   Конструктор1С
 
30 - 19.04.19 - 08:51
(29) дык, извращаться с гуидом куда менее оптимальное решение
 
 Рекламное место пустует
   Конструктор1С
 
31 - 19.04.19 - 08:51
Ладно, фиг с ним. Кто у кого будет получать данные? Обмен односторонний или двусторонний?


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.