37-ичная система исчисления

Статус
В этой теме нельзя размещать новые ответы.

murich

Постоялец
Регистрация
10 Фев 2007
Сообщения
143
Реакции
18
если в качестве идентификатора мы будим использовать не только числа, но и англ. буквы + цифры - у нас будит гораздо больше вариантов.
Интересует алгоритм, как можно перевести из десятичной системы исчисления в 37-ичную, используя в итоге латиницу и цифры

Добавлено через 15 минут
решение: Для просмотра ссылки Войди или Зарегистрируйся
 
Алгоритм точно такой же, как и при переводе из десятеричной в шестнадцатиричную.
Только букв в английском алфавите всего 26 + 10 цифр = 36, а не 37.

А ещё можно использовать знаки препинания и прочее :D
Только резонный вопрос - нахрена?
 
Обсчитался.

Сервис укорачивания ссылок делаю :)
 
А хэши чем не устраивают?
 
Ты извращенец, одназначно.

Для просмотра ссылки Войди или Зарегистрируйся
тебе мало возможностей bigint - от 0 до 18446744073709551615?
Уверен, что даже при высокой популярности сервиса, за 5 (пять) лет и половины не истратится.
 
А хэши чем не устраивают?
Видимо у меня мало опыта чтобы тебя понять... Я не знаю, как я могу осуществить именно свою задачу при помощи хешей. Если можешь- расскажи.
Ты извращенец, одназначно.

Для просмотра ссылки Войди или Зарегистрируйся
тебе мало возможностей bigint - от 0 до 18446744073709551615?
Уверен, что даже при высокой популярности сервиса, за 5 (пять) лет и половины не истратится.
Все дело в длинне ссылки. Если использовать в качестве идентификатора ссылки число в десятичной системе то, к примеру, в 3 символах идентификатора вместится 10^3 вариантов, а при использовании системе с основанием 36 - уже 36^3 получат свою ссылку длинной не более 3 символов.
В базе данных для идентификатора записи используется поле bigint, скрипт на лету переводит из одной системы исчисления в другую.
 
  • Заблокирован
  • #7
Ну и зачем для этого система счисления?
Или над идентификаторами ссылок возможны арифметические действия?
Чтобы выбрать следующий незанятый идентификатор, не надо преобразовывать в 37-ми (36-ти) -ричную систему счисления...
 
Надо, если ты хочешь получить вместо числа 123456 несколько букв/цифр (по аналогии с 65535 dec = FFFF hex).
 
  • Заблокирован
  • #9
Опишу как я понял задачу и ее возможное решение.
На входе сервиса - длинная ссылка (строка), состоящая из произвольных символов, а не только из десятичных цифр.
Ей в соответствие сервисом формируется короткая ссылка, содержащая только символы из тридцатишестисимвольного набора, которая получается не преобразованием исходной ссылки по неким правилам, а просто последовательным перебором доступных "слов" нового алфавита. (Ну, или если угодно, чисел в тридцатишестиричной системе).
Соответствие длинной и короткой ссылки хранится в таблице БД.
При этом не надо хранить идентификатор записи в виде bigint, идентификатором будет сама "короткая" ссылка. Все, что нужно сделать, это написать функцию increment_id, для получения следующего незанятого идентификатора.
 
Неправильно ты понял :D
Ссылка - это набор символов, а не цифр, поэтому перевести её в какую либо систему счисления не получится.
Поэтому ссылка заносится в БД и получает определённый id, допустим 7854223854.
Вот этот id и переводится. В итоге вместо _http://www.supersite.com/user/foto/128.jpg получим _http://www.redirect.com/1D425F1EE (в шестнадцатиричной системе счисления, в 36-ричной будет ещё короче).
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху