2014-01-28 38 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是这样写的。