c语言 字符串 索引,使用字符串索引数组(C)

如果您的问题符合以下假设,那么您实施的解决方案最好.

>对于每个有效字符,随机选择下一个字符串的最右边的字符,概率相等

>序列的开始总是不一样(它是随机的).

原因:

当我第一次阅读你的问题时,我提出了以下树:(为了简单起见,将你的问题缩减为长度为3个字符的字符串,并且只有2个可能的字符A和B)注意,根节点的最左边的子节点(在这种情况下是AAA)是总是与根节点(AAA)相同,因此我没有进一步构建该分支.

AAA

/ \

AAB

/ \

ABA ABB

/ \ / \

BAA BAB BBA BBB

在这个树中,每个节点都有下一个可能的序列作为子节点.要改进缓存,您需要使用广度优先遍历来遍历此树,并以相同的顺序将其存储在数组中.对于上面的树,我们得到以下字符串索引组合.

> AAA 0

> AAB 1

> ABA 2

> ABB 3

> BAA 4

> BAB 5

> BBA 6

> BBB 7

假设值(A)= 0且值(B)= 1,则可以将索引计算为

index = 2^0 * (value(string[2])) + 2^1 * (value(string[1])) + 2^2 * (value(string[0]))

这与您使用的解决方案相同.

我已经编写了一个python脚本来检查其他组合(比如长度为4个字符的字符串,其中A B C为可能的字符). Script link

因此,除非在开始时做出的两个假设是错误的,否则您的解决方案已经处理了缓存优化.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值