我正在尝试找到解决加密挑战的最佳(现实)算法,其中:
我的目标是识别25个Null,满足这两个条件:
显然,在暴力中有50个!/(25!25!)= 126410606437752个S中25个Null的组合,所以这不是一个现实的方法。
我试图以尽可能多的方式递归地探索Nulls和'cut branches'的树。 例如,当向Null的子集添加S的字母时,如果序列“x n1n2 x”出现在C中,其中x还不是Null而n1n2是Null,那么x也应该是Null。 然而,对于低于几个世纪的运行时间来说,这还不够......
你能想到一个更聪明的算法来识别这25个Null吗?
注意:可能有多个Null满足这两个条件
答案 0 :(得分:0)
让我们尝试这样的事情:
X[<set-chars>]+X
如果为每个集合保留不同的密文,则可以加快速度,从中删除集合中的字符。如果你这样做,搜索会更容易 - 你正在寻找XX,女巫是恒定长度。每次你联合两个集合时,你需要从密文中删除集合中的所有字符。
这段时间取决于你给出的字符串C.
关于集合的解释 - 每个集合是C'或N的选项。如果您发现A和X在同一组中,则{A,X}是N或C'的子集。如果稍后你会发现关于Y和B的相同,那么{Y,B}是一个子集。之后,找到子串YAXAXY意味着Y与A和X在同一组中,B也是如此,因为它与Y一起。最后你将以两个组结束 - 一个用于C',一个用于N,巫婆你无法区分。
答案 1 :(得分:0)
非常快。
我制作了两套C&#39;和N,相当于。 S,S1和S2的子集产生C&#39;和N充分地使得S = S1 U S2。
谢谢。