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

829 0
Honkers 2025-3-21 13:07:03 | 显示全部楼层 |阅读模式

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

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

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

原因:

当我第一次阅读你的问题时,我提出了以下树为了简单起见,将你的问题缩减为长度为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

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

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Honkers

荣誉红客

关注
  • 4010
    主题
  • 36
    粉丝
  • 0
    关注
这家伙很懒,什么都没留下!

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行