2012-01-14 68 views
0

如何可以在大整數集合所有具有已知恆定數字和,和數字的恆定量的待編碼的整數的有效的編碼。具有恆定數字和

在基座10的整數,與數字和5,和3位的實施例:

014, 041, 104, 113, 122, 131, 140, 203 .... 

最重要的因素是空間,但計算的時間不完全不重要。

+1

對於任何非零數字總和(203,2003,20003,...),此集合是無限的。你對數字的數量有限制嗎? – TonyK 2012-01-14 11:42:58

+0

是的,數字的數量也是恆定的。 – Allan 2012-01-14 13:37:56

+0

你想用哪種語言?我在下面的python中提供了一個解決方案。它所缺少的是使用置換庫,這非常簡單。 – JustinDanielson 2012-01-15 05:50:48

回答

0

最簡單的方法是將存儲數字和本身,並留在這一點。

但是我可能誤解了這個問題。

編輯:這是我的外賣:你想編碼集本身;是嗎?

編碼集合本身是爲存儲所述基部,所述數字和,和位數一樣簡單,例如你給的例子中的{10, 5, 3}

大部分的時間,但是,你會發現,一些最緊湊的表示是數字本身,除非是非常大的。

另外,因爲數字和通常被認爲是遞歸的;和1至9之間,包括1和9; 203具有與500,或140,或950相同的數字總和。這意味着該組對於任何數字組合都是巨大的,並且任何組合(除了某些退化情況)都使用基數中的每個可用數字與...有關。

所以,你知道,單獨存儲時數字本身的最有效編碼就是數字本身,特別是考慮到±2 147 483 648之間的每個數字通常在內存中佔用相同數量的空間,並且通常在存儲中。

+0

好的,我需要的是一個編碼器和一個解碼器(一個編解碼器)。關鍵是數字總和總是相同的。如果我將122編碼爲數字總和,那麼我將得到5,但他們無法將5解碼回122。 – Allan 2012-01-14 13:39:24

0

當已經作爲明確定義的一組可能值來編碼,因爲這直進編碼理論方法是按順序編號的所有可能的值,然後將其存儲一樣多的位必要這個數字。如果各個值的頻率相同或不知道,這非常明顯是最佳的。如果你對頻率分佈有所瞭解,你將不得不使用像霍夫曼代碼這樣的東西來獲得真正的最佳結果,但這很複雜,我只處理另一種情況。

對於均勻分佈(或未知)情況,方法如下: 想象一下(您可以預先生成並存儲它,或者即時生成)按字典順序排列的所有輸入列表(對於編碼)值。例如。在您的情況下,列表將開始(除非您的數字總和是遞歸的):005,023,032,050,104,113,122,131,140,​​203,212,221,230,401,410,500。 然後根據列表中的位置爲列表中的每個項目分配一個整數:005變爲0,023變爲1,032變爲2等等。在列表中有16個值(除非我犯了一個錯誤,如果是這樣,請適當調整),爲此需要4位將任何索引編碼到列表中。該索引是您的編碼值,編碼和解碼變得明顯。

至於算法來生成擺在首位名單:最簡單的方法是計算從000到999,扔掉不符合您的條件的一切。它通過複製計數和溢出(例如,104如何跟隨050)可能更聰明,但它可能不值得。