・URLから可逆的なキーを作っている。
(これだったらすごいんですけど(;´∀`))
・URLから非可逆なキーを作っている。
URLとキーの対応表(マップ)を別に持っている
・URLとは関係なくキーを作っている
URLとキーの対応表(マップ)を別に持っている
・その他
こうこう、こういうロジックで圧縮してるんじゃない?というのが推測可能な方はそれもお願いします。
http://en.wikipedia.org/wiki/TinyURL
この解説があっているかどうかはわからないのですが、非可逆なハッシュ(tinyURL)を生成、登録先をデータベースにしまっておいてそのハッシュで引く、と書いてありますね。
圧縮ではないと思います。
恐らく内部に対応表を持っているのでしょうが、キーの作り方はなぞですね。
地図サイトで適当な箇所を表すURL(緯度・経度)を少し変えて登録すると、IDは連番になることなく、しかも同じ6桁でした。
関係なくキーを作ったのなら、恐らくIDは連番になるでしょうが、そうならなかったことを間gなえると、上記の選択肢では
URLから非可逆なキーを作っているのではないかと思います。
IDからURLが求められれば、あとはリダイレクトすればいいだけですからね。
ちなみに結果は「Error: Unable to find site's URL to redirect to.」となります。
可逆ならどこかのサーバにアクセスし、404かブラウザがエラーをはくでしょう。
回答ありがとうございますー。
あまり質問者が言うとあれなのですが、ランダムな順列を作って、それを頭から順番に使っているとか考えると本当に謎なんですよね(笑)
ご回答いただいたとおり、やはり連番ぽさはないですよねぇ。TinyURLが独自のロジックで、おそらくURLを用いて作成しているというニオイが強そうですねぇ。
単純にハッシュ計算をしているのではないかと思います。
36進数(0-9,A-Zの36文字を使う)6桁なのでだいたい22億通りのURLを表現できるわけで、一様に分布するハッシュ関数であれば同じ文字列が出る可能性は低いのであらかじめ乱数列を決めておくという必要はありません。
#英語のWikioediaは見ていませんでした(^^;
なるほど。
さすがにあの短さで可逆なハッシュは無理なんでしょうねぇ。
引き続きご意見などを募集します。こうやってんじゃない、というのを推測でもちろんかまわないのでお書込みください。
※ハッシュ生成方法などについても
同様です。