多维状态的哈希存储

在尝试写mdp环境的时候,state可能是一个多维的状态,比如迷宫有{x,y},当然也可以用x*size(y)+y来表示,或者直接识别成字符串,如书上所写

key = "%d_%s"%(state, action)

再或者将内容转化为byte然后存入hash(这种方法我很怀疑能不能行,毕竟不同的object转化为byte的结果不同)
在一位ACMer的解题思路中,我找到了解决这个多维hash的一个可行的方法
如上文中提到的{x,y}状态如何存入hash表中
状态{x,y}可以理解为一个二维的状态,我们可以将x位置的数值作为hash表的key,对应的value为一个新的hash表,用来存储y位置的key-value,而这个hash表的value就是{key:(x,y),value:v}中的v
引申到多维的状态
同二维一样,多维的状态也是将状态的第一个位置的值作为key存入root,value为hash表,直到读到key的最后一个,value为整个状态的value。

下面是我用python写的一个demo

class HighDict:
    def __init__(self):
        self.root = dict()
    
    def save(self,key,value):
        key = self.flatten(key)
        item = self.root
        for iter1 in range(len(key)-1):
            k = key[iter1]
            item[k] = dict()
            item = item[k]
        k = key[len(key)-1]
        item[k] = value

    def read(self,key):
        key = self.flatten(key)
        value = self.root
        for iter1 in range(len(key)):
            k = key[iter1]
            value = value[k]
        return value

    # 多维数组转化为一维数组
    def flatten(self,a):
        if not isinstance(a, (list, )):
            return [a]
        else:
            b = []
            for item in a:
                b += self.flatten(item)
        return b
        
if __name__ == "__main__":
    d = HighDict()
    key1 = [[1,2,3],[2,3,4]]
    value1 = 6
    d.save(key1,value1)
    key2 = [2,3,4]
    value2 = 9
    d.save(key2,value2)
    print(d.read(key1))
    pass

测试结果

当hash一个100*100的矩阵时,耗时:0:00:00.005996
当hash一个1920*1080的矩阵时,耗时:0:00:01.369210

不知道还有没有更好的方法,等找到了再试试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值