快速递归算法遍历生成De Bruijn序列
来源:互联网 发布:互联网架构软件架构 编辑:程序博客网 时间:2024/06/06 01:19
matlab生成De Bruijn序列
如前文所诉,若要使用傻瓜式生成De Bruijn序列,即把每一种情况都考虑一遍,那么当n=5时,恐怕你的机器都要跑将近一周。考虑到当序列前已重复时,后面变动的情况就不需要判断,可以将生成时间大大缩短。
当然,还有一些其他的想法也可以缩短时间,就不一一实现了。
直接上代码吧。
- 编写递归函数func.m
function func()global s l n k data;if(size(s,2)<l)%&&bin2dec(num2str(s(:)))<=(2^l-1) for p=0:1 s(k)=p; s=s(1:k); for j=1:k-n+1 ss{j}=num2str(s(j:j+n-1)); end if(length(unique(ss))==k-n+1) if(k+1>l) s_span=[s s(1:n-1)]; for m=1:l ss_span{m}=num2str(s_span(m:m+n-1)); end if(length(unique(ss_span))==l) fprintf(data,'%s\n',num2str(s)); end continue; end k=k+1; func(); k=k-1; end end% if(p==1)% k=k-1;% end% if(k>l)% s_span=[s s(1:n-1)];% for m=1:l% ss_span{m}=num2str(s_span(m:m+n-1));% end% if(length(unique(ss_span))==l)% fprintf(data,'%s\n',num2str(s));% disp(['打印成功']);% end% endend
- 编写主函数
clcclearglobal s l n k data;n=5;k=n+1;data=fopen(['D:\test_n=' num2str(n) '.txt'],'wt');l=2^n;%;%head=1 s=[0 1]head=0:2^n-1;head_binc=dec2bin(head,n);for i=1:length(head_binc) disp(['已完成' num2str(i) '/' num2str(l) ]); head_bin=head_binc(i,:) %s=head_bin; s=str2num(head_bin(:))'; func();endfclose(data);
大概估计了一下时间,计算n=5的时候大概运行3、4个小时就差不多了。
做了几组n比较小时的数据,需要的同学可以找我要。
0 0
- 快速递归算法遍历生成De Bruijn序列
- De Bruijn序列的生成及其应用
- De Bruijn序列的matlab暴力生成
- 结构光编码之De Bruijn序列
- De Bruijn Sequence
- 前中后序非递归遍历算法
- 递归算法-fibnacci序列
- 快速排序,递归算法
- 快速排序递归算法
- 快速排序算法(递归)
- 快速排序递归算法
- 递归算法 快速排序
- 快速排序--递归算法
- 遍历节点生成菜单(递归)
- 递归遍历XML生成树
- 求de Bruijn图上与目标串最小编辑距离
- 生成组合序列算法
- 二叉树后序遍历(递归算法)
- 使用存储过程进行分页查询
- ListView中显示不同的item
- Dalvik与ART的区别:
- CDOJ 1134 男神的约会
- 新手笔记之安卓自定义title标题栏使用
- 快速递归算法遍历生成De Bruijn序列
- 2016蓝桥杯第三题
- C++实现双向链表
- LeetCode 21 Merge Two Sorted Lists
- UNIX BUILD NOTES
- 如何在windows平台下编译比特币bitcoin客户端
- 个性化智能推荐(协同过滤算法)技术研究
- Linux环境下socket通信
- Java中实现链式操作的简单例子