看起來下面給出的信息(行)不夠清晰,所以我試圖更加清晰和簡潔。高效地將18億BILLION輸入值映射到幾個輸出值
我需要關於如何將數十億個ulong值映射到幾個int值的建議。在最壞的情況下,我有超過110億(基本上是隨機的ulong值),需要映射到40個int值。映射是已知的,除了所需的內存量之外,字典可以工作。目前,估計當使用字典時,大約199GB的RAM將用於所有需要的映射。
有沒有人知道任何一種算法或過程,可以用來完成這種映射,而不消耗這麼多的RAM?
我正在使用C#.NET 4.5程序來幫助篩選我的數據並且遇到效率問題。我目前正在運行8個數據庫(我最終需要做20個)不同的過濾器,每個過濾器都以相同的方式過濾數據,但在不同的層次上。在過濾器過程中的某個點上,每個級別都有許多必須編碼到最終輸出值中的值。
一些例子:
在第3級有23個值被編碼到6個可能輸出值(0-5)。
在級別7有2,576個值被編碼成14個可能的輸出值(0-13)。
在第10級,有88,215個值被編碼爲20個可能的輸出值(0-19)。
當我達到20級時,我將有11個以上的BILLION值被編碼爲40個輸出值(0-39)。
爲每個過濾器編碼的值都是事先已知的,我正在從文件中讀取這些信息併爲每個過濾器(當前爲1到8)填充單獨的字典。按照這個速度,當我過濾20時,將會有超過16.5億的總字典條目,其中大多數是ulong值。
從長遠來看,這不是一個解決方案。
有誰知道一種方法將數百萬個唯一的輸入值映射到幾個唯一的輸出值更有效嗎?
是否有算法將輸入映射到輸出?
我在尋找任何想法,可能會指出我在正確的方向。
我擔心這對任何人來說都太模糊,無法提供幫助。不知道你的過濾器是做什麼的,或者爲什麼(或者如果)他們是需要的,提供關於如何提高效率的建議幾乎是不可能的。 – Alfie
我有一個問題。你能告訴我解決我的問題嗎? –
我認爲根據您提供的信息,字典方法聽起來非常合理。它是專門爲將大量獨特輸入映射到輸出而設計的數據結構。你目前的做法是否遇到任何具體問題? – Baldrick