Имя: Пароль:
1C
 
Обжать 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
Ладно, фиг с ним. Кто у кого будет получать данные? Обмен односторонний или двусторонний?