2011-03-16 34 views
1

我正在開發一段代碼來從輸入字符串生成唯一的十六進制值。輸出的大小必須小於11個字節,這是需要的。可以給我一個洞察力。我已經完成了二進制轉換的字符串,然後是產生字母數字字符組合的六角形映射,但大小始終大於11個字節。我還需要從這種獨特的id..Is是可能的再生輸入.....在adavance如果一個字符串的大小小於11個字節的唯一ID生成

+0

如果未指定輸入字符串的長度/內容,則顯然不存在可能的1對1到十六進制(<11字節)的映射,因爲字符串的域可能更大。 – Winfred 2011-03-16 07:33:10

+0

@Winfred:這正是我想在下面說的。我用了更多的話;-) – 2011-03-16 07:33:43

+0

@Joachim紹爾:我剛剛添加它作爲評論:P。很高興你把它擺好。 – Winfred 2011-03-16 07:51:05

回答

1

如果您的結果一定是絕對獨特的

感謝您的輸入可以是任何長度,然後你的任務是不可能的。

想一想:11個字節有多少種不同的組合? 256 (或2 11 * 8 = 2 )。

這是一個很大的數字,對吧?是的,但它不夠大。

爲了簡單起見,我們只討論ASCII字符串,所以我們有128個不同的值(實際上Java中的字符有更多的可能性,但是原理保持不變,爲簡單起見,我們也是忽略String中的\0字符是不太可能的)。

現在,有128個不同的13個字符的ASCII字符串,其中有128 。這是2 7 * 13或2 不同的組合。很明顯,你不能有一個唯一的ID爲2 可能的ID爲2 不同的字符串。

+0

我忘了提及輸入大小。它小於100個字節。這是否有助於 – nowfal 2011-03-16 11:08:51

+0

nowfal:不是。除非有其他限制(或者您可以取消唯一ID的要求),否則仍然無法將每個可能的輸入匹配到11個字節。 – 2011-03-16 11:35:32

+0

好吧...如果我不再需要重新生成輸入,並使用一些哈希算法從輸入生成標識符,則輸出大小仍然相同,即11個字節;它工作嗎?我想MD5可以在這裏做一些幫助..我遇到了一些關於這個問題的線索... – nowfal 2011-03-16 11:50:21

0

少於11個字節表示最多10個字節。

8^10是1073741824. 2^80是一個龐大的數字。

所以,如果你把你的hexvalue,並以它爲模數,你應該適合10個字節。將餘數轉換回十六進制。

重新生成輸入將不可能。如果您的輸入允許超過11個字節,則不可能。這將是一個無盡的壓縮。

+0

感謝您的幫助... :) – nowfal 2011-03-16 11:37:05

+0

對不起數學錯了。但是,我猜2^80,而不是2^88是正確的答案。 (對於這個數學問題,不是你的問題)。如果你可以排除輸入的20%的字節,如果你試圖用80個字節表示100個字節子集的話,它會變得很有意思。 – 2011-03-16 14:30:41

+0

請你解釋爲什麼再生是不可能的,只要我們能夠在消除輸出大小要求(11字節)後生成一個唯一的十六進制值 – nowfal 2011-03-17 05:27:27

相關問題