[英]Need efficient algorithm in combinatorics
我正在尝试找到解决加密挑战的最佳(现实)算法,其中:
我的目标是确定满足以下两个条件的25个Null:
显然,通过蛮力在S中有25个Null的50!/(25!25!)= 126410606437752组合,因此这不是现实的方法。
我试图尽可能快地递归地探索由Null和“剪切分支”组成的树。 例如,当将字母S添加到Null的子集时,如果序列“ x n1n2 x”出现在C中,其中x尚未为Null,而n1n2为Null,则x也应为Null。 但是,对于不足几个世纪的运行时间而言,这还不够...
您能想到一种更聪明的算法来识别这25个Null吗?
注意:满足两个条件的null可能不止一组
让我们尝试这样的事情:
X[<set-chars>]+X
如果为每个集合保留不同的密文,则可以加快处理速度,从中删除集合中的字符。 如果这样做,搜索会更容易-您正在搜索XX,女巫的长度是恒定的。 每次将两个集合合并时,都需要从密文中删除集合中的所有字符。
花费的时间取决于您给定的字符串C。
有关集合的说明-每个集合都是C'或N的选项。如果发现A和X在同一组中,则{A,X}是N或C'的子集。 如果以后您会发现关于Y和B的相同内容,那么{Y,B}是一个子集。 稍后,找到子字符串YAXAXY意味着Y与A和X在同一组中,因此B与Y在同一组中,因为它与Y在同一组。最后,您将分为两组-一组用于C',另一组用于N,巫婆无法区分。
elyashiv的方法是不错的方法。
非常快。
我制作了两组C'和N,它们是等效的。 产生C'和N的S,S1和S2子集足以使S = S1 U S2。
谢谢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.