Я хочу создать службу сокращения URL-адресов, в которой вы можете записать длинный URL-адрес в поле ввода, а служба сокращает URL-адрес до " http://www.example.org/abcdef
".
Вместо " abcdef
" может быть любая другая строка с шестью символами, содержащая az, AZ and 0-9
. Это составляет 56 ~ 57 миллиардов возможных строк.
Мой подход:
У меня есть таблица базы данных с тремя столбцами:
- id, целое число, автоинкремент
- long, string, длинный URL, введенный пользователем
- короткий, строка, сокращенный URL (или только шесть символов)
Затем я вставил бы длинный URL в таблицу. Затем я выбрал бы значение автоинкремента для " id
" и построил его хеш. Этот хэш должен быть вставлен как " short
". Но какой хеш я должен создать? Алгоритмы хеширования, такие как MD5, создают слишком длинные строки. Я не использую эти алгоритмы, я думаю. Самостоятельный алгоритм тоже подойдет.
Моя идея:
Для " http://www.google.de/
" я получаю идентификатор 239472
. Затем я делаю следующие шаги:
short = '';
if divisible by 2, add "a"+the result to short
if divisible by 3, add "b"+the result to short
... until I have divisors for a-z and A-Z.
Это может повторяться до тех пор, пока число больше не будет делиться. Как вы думаете, это хороший подход? У тебя есть идея получше?
Из-за постоянного интереса к этой теме я опубликовал эффективное решение для GitHub с реализациями для JavaScript, PHP, Python и Java.Добавьте ваши решения, если хотите :)