我們在DB值一樣
Chennai
Baroda
Bangalore
New Delhi
São Paulo, Lisboa
San Jose
等等
所以我想將這些字符串轉換爲唯一的短字符串。例如,
Chennai –> xy67kr
San Jose –> iuj73d
基本上類似於URL縮寫的東西。
而且算法,可將本應是可逆的,即..當我通過「xy67kr」的解碼功能,應該給我回來「奈」。
期待着幫助。
我們在DB值一樣
Chennai
Baroda
Bangalore
New Delhi
São Paulo, Lisboa
San Jose
等等
所以我想將這些字符串轉換爲唯一的短字符串。例如,
Chennai –> xy67kr
San Jose –> iuj73d
基本上類似於URL縮寫的東西。
而且算法,可將本應是可逆的,即..當我通過「xy67kr」的解碼功能,應該給我回來「奈」。
期待着幫助。
正如其他海報說,你不能有縮短任意字符串的函數,這就是數學上是不可能。但是你可以創建一個自定義的函數,它可以很好地適用於你的特定字符串。
一個例子的方法是計算該組中的字頻,然後只用編碼該字符的prefix code使得最頻繁的字母與短前綴編碼(即Huffman coding)
上面的方法的確不利用自然語言中的下一個字符可以從以前的字符中很準確地預測的事實,因此您可以擴展上述算法,以便不用獨立編碼字符,而是使用n元語法編碼下一個字符。這當然需要比簡單方法更大的壓縮表,因爲根據前綴,您實際上有單獨的代碼。例如,如果'e'在'th'之後非常頻繁,那麼'th'之後的'e'用非常短的前綴編碼。如果'e'在'ee'之後非常不頻繁,那麼在這種情況下它可以用非常長的前綴進行編碼。解碼算法顯然需要查看當前解壓縮的前綴以檢查如何解碼下一個字符。
這種一般方法假定頻率不會改變,或者至少緩慢改變。如果數據集發生變化,則可能需要重新計算統計信息並對字符串進行重新編碼。
我懷疑這將適用於短輸入數據。似乎OP也想要一種固定長度的編碼,這顯然是不可能的。 – 2012-03-30 13:21:05
@OliCharlesworth相反,即使對於單字符字符串,這種統計編碼也可以很好地工作,即使結果代碼是6位,您仍然必須發送(或保存)至少一個字節。我同意定長編碼是不可能的。 – 2012-03-30 13:48:40
好吧,在我原來的問題中,我問我的輸入字符串可以是可變長度的。因此,假設我通過應用填充使它們具有固定長度,即,使用填充,即 即 - >紐約[變成] - >紐約!@ !! @!或類似的東西。編碼後可以縮短它們嗎? – Taher 2012-04-02 06:10:45
見my answer到類似的問題,只是它重寫PHP:
編碼:
$encoded = base64_encode(gzdeflate("São Paulo, Lisboa"))
解碼:
$decoded = gzinflate(base64_decode($encoded))
注意gzdeflate
執行比gzcompress
短串好。
但無論如何,這個問題是,對於短字符串它使串長。這對較長的文本表現更好。 這將是當然更好用一些壓縮算法先驗信息,如100ppm或後綴的方法與最初的後綴樹......那就在短字符串很好地工作也。
不能縮短任意長度的字符串,以固定長度之一。
您可以做的是爲數據庫中特定字符串的行創建唯一ID的短字符串。這裏有一些提示:How to design a sequential hash-like function。
這不一定是確定性的,但顯然你可以使用查找表。該服務將類似於goo.gl或imgur
字符串是否需要具有固定長度? – 2012-03-30 08:21:41
如果你有一個數據庫,那麼反轉的處理應該很容易... – 2012-03-30 08:21:51
1 - 字符串不是固定長度。最大長度= 200個字符 2 - 我想避免數據庫調用。這就是我想要生成算法的原因。可以在DB中使用哪些字符串進行編碼。相同的算法可以用於在我的web應用程序中解碼並獲得實際價值 – Taher 2012-03-30 08:22:48