我需要將長度爲60-100個字符的可變長度字符串轉換爲16個字符的唯一字符串。請注意,輸入也是唯一的。是否有一些現有的哈希算法可以使用?還是有另一種方式可以實現?如何將可變長度的字符串轉換爲16個字符的字符串?
0
A
回答
0
可變長度60的字符串唯一可以有很多超過16個長度的字符串。
所以一般的,好的算法是不可能的。這就像從每個字母唯一的(A-Z)的一個數字(0-9)
0
散列函數不具有由鴿巢原理獨特輸出產生。如果你確實是有小於< 2^16個不同的輸入,這是可能,但這不是任何散列函數,我知道的一個設計目標,你必須創建的所有知識的散列函數輸入。所以你不得不效仿它。這是合理有效的,最簡單的方案似乎是:
- 保持關聯數組從輸入字符串到整數
- 當散列字符串,看看它的關聯數組中
- 如果是關聯數組中,返回相關的值
- 否則,讓
map[input] = map.entry_count()
並返回
這將爲每個輸入分配一個唯一的整數,並在O(1)期望時間或O(log n)時間內進行散列,但需要一定的空間。然後,您可以轉換這個整數爲字符串,如果你一定要,例如用base64編碼,十六進制表示,或將其解釋爲在某些字符編碼字符串(雖然你要照顧與有效字符串結束)。其中每一個給你的結果遠遠超過10^16個,並且使得字符串不太可能被數字混淆。
相關問題
- 1. 如何將字符串的字符串轉換爲字符?
- 2. 將字符串變量轉換爲長
- 3. 如何打印單個字符的可變長度字符串
- 4. 將字符串轉換爲字符串
- 5. 將字符串轉換爲字符串
- 6. 將字符串轉換爲字符串
- 7. Javascript - 將字符串轉換爲UTF-16
- 8. 將兩個字符串轉換爲相同的字節長度
- 9. 將四個字符的字符串轉換爲長整數
- 10. 如何將具有特殊字符的字符串轉換爲轉義字符串的另一個字符串
- 11. 如何轉換字符串長度?
- 12. 如何將字符串轉換爲長字符?
- 13. 如何用一個字符串「填充」一個可變長度的字符串?
- 14. 將字符串轉換爲可變
- 15. 如何將字符串文字轉換爲字符串值
- 16. 從字符串中提取可變長度的子字符串
- 17. 如何將字符串轉換爲HTML友好的字符串
- 18. 如何將字符串轉換爲Perl中的unicode字符串
- 19. 如何將圖像上的字符串轉換爲字符串?
- 20. 如何將Unicode編碼的字符串轉換爲字符串
- 21. 如何將字符串的元組轉換爲字符串*?
- 22. 將字符串轉換爲可逆的字符串,在Java中
- 23. 將字符串解析爲多個可變長度字符串(C#)
- 24. 將Java字符串轉換爲16字節的字節數組
- 25. 將可變長度字符串分配給固定長度字符串
- 26. 將字符串轉換爲字符ascii
- 27. Java - 將字符串轉換爲字符[]
- 28. C++ - 將字符串轉換爲字符
- 29. 將字符*轉換爲字符串
- 30. 將字符串轉換爲字符
如何做這樣的事情:http://stackoverflow.com/questions/8499550/generate-md5-hash-in-java-output-16-character?該解決方案對所使用的散列函數是不可知的,所以如果您關心安全性,則可以使用比MD5更好的算法。 – Kitsune
這不是哈希如何工作。您正在尋找壓縮。將100個字符壓縮爲16是高度數據特定的。你說輸入是「獨特的」;它是預定的嗎?也就是說,你知道每個輸入值會是什麼嗎?如果沒有,你可能無法達到你想要的。 請發佈有關您的數據的更多信息。 –