2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Как преобразовать число в более короткое
Сообщение09.11.2005, 13:20 
Добрый день! Возникла задача:
есть число в шестнадцатиричной системе счисления вида 1234567842cd18b576a0000000000427, необходимо с помощью какого-нибудь алгоритма его преобразовать, с целью уменьшения размерности (преобразование должно быть обратимо, т.е. должна быть возможность восстановления оригинала, на основании преобразованного значения). Также необходимо отметить, что исключения букв из числа ведет к уменьшению его размерности (т.к. в последующим оно будет также кодироваться).

Единственное что я придумал, так это перевод этого числа в десятичную систему счисления, для указанного выше примера получим: 24197857176051669629762955405363774503 - хоть кол-во символов в представлении числа и увеличилось, но за счет того, что исчезли буквы, последующее его кодирование уменьшает длину кода.

Господа математики, подскажите пожалуйста можно как либо еще преобразовать эти числа с целью уменьшени их размерности (желательно, чтобы букв не осталось)?

  
                  
 
 
Сообщение09.11.2005, 18:10 
Экс-модератор


12/06/05
1595
MSU
Можно попробовать переводить сразу в двоичную систему, резать на блоки по 8 бит и кодировать несколькими байтами.

 Профиль  
                  
 
 а зачем?
Сообщение09.11.2005, 18:21 
Супермодератор
Аватара пользователя


29/07/05
8248
Москва
Не очень понятен смысл - зачем все это нужно. Почему 10 цифр - подходит, а 16 цифр - нет? В чем принципиальная разница?

 Профиль  
                  
 
 
Сообщение09.11.2005, 18:54 
Если перевести в 2-оичный вид, а потом кодировать по байтно, то получиться 16 байт, т.е. 16 символов в кодировке ASCII. А мне желательно избежать букв, а уж темболее различных символов

  
                  
 
 
Сообщение09.11.2005, 18:57 
Просто полученная информация кодируется штрих кодом в формате Code 128. Желательно сделать его длину как можно меньшей

  
                  
 
 
Сообщение09.11.2005, 19:03 
А этот код обладает таким свойством, что для того, чтобы закодировать строку символов вида:
1234567842cd18b576a0000000000427 - длинною 32 символа, минимальная длина кода, должна быть порядка 70 миллиметров. А вот если кодировать строку:
24197857176051669629762955405363774503 - 38 символов, можно обойтись длиной кода всего 50 миллиметров. Но тоже многова-то. Хотелось бы еще уменьшить его длину.

  
                  
 
 Re: Как преобразовать число в более короткое
Сообщение09.11.2005, 20:06 
___Олег___ писал(а):
Добрый день! Возникла задача:
есть число в шестнадцатиричной системе счисления вида 1234567842cd18b576a0000000000427, необходимо с помощью какого-нибудь алгоритма его преобразовать, с целью уменьшения размерности (преобразование должно быть обратимо, т.е. должна быть возможность восстановления оригинала, на основании преобразованного значения). Также необходимо отметить, что исключения букв из числа ведет к уменьшению его размерности (т.к. в последующим оно будет также кодироваться).

Единственное что я придумал, так это перевод этого числа в десятичную систему счисления, для указанного выше примера получим: 24197857176051669629762955405363774503 - хоть кол-во символов в представлении числа и увеличилось, но за счет того, что исчезли буквы, последующее его кодирование уменьшает длину кода.

Господа математики, подскажите пожалуйста можно как либо еще преобразовать эти числа с целью уменьшени их размерности (желательно, чтобы букв не осталось)?



pridumalochenj prostoi algoritm
smqsl v sledujushem razbivaem chislo po dve chifrq s pravo na levo
24 19 78 57 17 60 51 66 96 29 55 40 53 63 77 45 03
nahodim summq par i poluchaem novoe chislo
6 10 15 12 8 6 6 12 15 11 10 4 8 9 14 9 3
6101512866121511104891493
prodelqvaem tu zhe operatsiju do tex por poka ne poluchim odnoznachnoe chislo
6 10 15 12 86 61 21 51 11 04 89 14 93
6163147362417512
61 63 14 73 62 41 75 12
7951085123
79 51 08 51 23
166865
16 68 65
71411
7 14 11
7 5 2
7 7
14
5
v itoge mozno poluchitj dva chisla kotorqe obrazujut storonq treugoljnika(poprobuite reshitj na bumage i togda uvidite) odno 2667177715 i drugoe takoi zhe dlinq 3323512745
obratnoe znachenie nahoditsja putem raznosti
a esli nado eshe raz umenjshitj dlinnu chisla to mozhno prodelatj tu zhe operatsiju uzhe s poluchivshimsja chislom
esli voprosq to algoritmu to pishite usualis@hotmail.com
chem smogu pomogu

  
                  
 
 
Сообщение09.11.2005, 20:10 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:

Ничтожный осмелится заметить, что это вопрос из Computer Science. Там люди более осведомленные в вопросах представления и кодирования информации. И посоветовать больше смогут.

Если я правильно Вас понимаю, Вы пользуетесь Code-128, Charset C для кодирования цифр. Он действительно весьма плотен. Вы можете попробовать Charset B, предварительно упаковав двоичное число чем нибудь типа Base-85 (результат для 32-hex будет ASCII строка длинной 20, аккурат в Charser B). Будет ли это короче в Code-128, Вам виднее, но это, пожалуй, все, что можно сделать для представления прозвольного числа.

 Профиль  
                  
 
 Re: Как преобразовать число в более короткое
Сообщение09.11.2005, 20:13 
da zabql skazatj
poluchaem dva chisla no dlja rekodirovki dostatochno odnogo :)

  
                  
 
 вопрос по коду-128
Сообщение09.11.2005, 20:18 
Супермодератор
Аватара пользователя


29/07/05
8248
Москва
Прочитал описание кода и не до конца понял, сколько значений может принимать каждый информационный знак (без учета заголовка и окончания, которые все равно есть всегда). Также нужно знать, какой длины шестнадцатиричные строки нужно кодировать. Всегда 32 символа или произвольной длины? Есть ли какие-то закономерности в числах или они могут быть совершенно произвольными?

 Профиль  
                  
 
 Re: Как преобразовать число в более короткое
Сообщение09.11.2005, 20:27 
proshu proshenija no eto opjatj ja
etot algoritm mozhno ispoljzovatj ne toljko dla chifr no i slov no predvoriteljno nado vse perevesti v dvoichnqi kod a daljshe vse po sheme

  
                  
 
 
Сообщение09.11.2005, 20:42 
Супермодератор
Аватара пользователя


29/07/05
8248
Москва
2 mathfan:

непонятно, как восстанавливать число обратно. Как понять, например (беру первый шаг), что из последовательности

6 10 15 12 8 6 6 12 15 11 10 4 8 9 14 9 3

нужно получить именно

24 19 78 57 17 60 51 66 96 29 55 40 53 63 77 45 03,

а не

24 19 78 57 17 60 51 66 96 29 28 40 53 63 77 45 03?

 Профиль  
                  
 
 
Сообщение09.11.2005, 20:44 
незванный гость писал(а):
:evil:

Ничтожный осмелится заметить, что это вопрос из Computer Science. Там люди более осведомленные в вопросах представления и кодирования информации. И посоветовать больше смогут.

Если я правильно Вас понимаю, Вы пользуетесь Code-128, Charset C для кодирования цифр. Он действительно весьма плотен. Вы можете попробовать Charset B, предварительно упаковав двоичное число чем нибудь типа Base-85 (результат для 32-hex будет ASCII строка длинной 20, аккурат в Charser B). Будет ли это короче в Code-128, Вам виднее, но это, пожалуй, все, что можно сделать для представления прозвольного числа.


Да действительно, я в начале тоже подумал написать туда, но т.к. сам программист, уже попробовал много всяких способов, но кординально уменьшить длину кода не удалось, вот я и решил обратиться к математикам, в надежде найти какое-нибудь красивое решение этой задаче. Если вы заметили, в первом посте я даже не написал о том что буду делать с числам (дописал уже потом, т.к. люди спрашивали).
Да вы правильно поняли используется Code-128. А вот упаковать Base-85 я попробую, спасибо.

  
                  
 
 Re: Как преобразовать число в более короткое
Сообщение09.11.2005, 20:44 
mathfan писал(а):
da zabql skazatj
poluchaem dva chisla no dlja rekodirovki dostatochno odnogo :)


не понятен алгоритм, поясните пожалуйста

  
                  
 
 Re: вопрос по коду-128
Сообщение09.11.2005, 20:54 
PAV писал(а):
Прочитал описание кода и не до конца понял, сколько значений может принимать каждый информационный знак (без учета заголовка и окончания, которые все равно есть всегда). Также нужно знать, какой длины шестнадцатиричные строки нужно кодировать. Всегда 32 символа или произвольной длины? Есть ли какие-то закономерности в числах или они могут быть совершенно произвольными?


Шестнадцатитричные строки всегда длиною 32 символа. Закономерности в числах есть - они все уникальные, короче GUID :)

  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: Dmitriy40


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group