2014-01-28 54 views
-2

我有一個問題,需要搜索並保存一些值,以防止它進行無限循環。此問題的每種可能狀態均表示爲基數爲6的唯一8位數字代碼(所有數字均爲0-5)。當程序評估這個位置時,我想要一個布爾值被設置爲true,以免再次評估這個位置。然而,數組1..55555555在內存中太大,如果我將8位數的代碼轉換爲十進制數,則需要太多時間。在問題中也不是所有的組合都是可能的; 11 11 11 11,11 11 55 12和其他無效,我不需要使用額外的內存。那麼,有沒有一種方法可以將值爲「真」的一塊內存與地址一起存儲,例如23451211,當我調用評估過程時,檢查23451211是否爲真或未分配;帕斯卡內存問題

+1

你可以發佈你的代碼或其中的一部分?這將有所幫助。 –

回答

1

6到電源8 = 1679616.

要標記使用或不使用需要一個比特,從而可以用約209952個字節做。

在最近的Free Pascal的,bitpacked結構做如下

 var 
      arr : bitpacked array [0..6*6*6*6*6*6*6*6-1] of boolean; 

和ARR [X]會給真或假。

從基準6到二進制(不是十進制!)的轉換時間可能會短於嘗試使用大量內存。 (((digit8)* 6 + digit7)* 6 + digit6)* 6等

p.s. FPC確實有一個指數運算符,但不是用於常量,所以這就是爲什麼6^8是這樣寫的。