排列组合算法的实现代码
有些时候我们需要利用程序实现排列组合算法, 下面是我根据网上的代码改写的awk代码, 可实现排列或是组合, 当然元素数目不能太大.
排列
# Language: bash
awk ' BEGIN { Ndat=3
for(i=1; i<=Ndat; i++) {P[i]=i}
YesDone=0
while(!YesDone) { for(i=1; i<=Ndat; i++) printf"%d ", P[i]
print ""
NextPermut(Ndat, P)
}
}
function NextPermut(Ndat, P) { if (Ndat==0) {YesDone=1; return}
# 从后向前查找,看有没有后面的数大于前面的数的情况P(i-1)<Pi,若有则停在后一个数的位置。
# 若没有后面的数大于前面的数的情况,说明已经到了最后一个排列,返回
for(i=Ndat; i>0 && P[i-1]>P[i]; i--) { }
Iend=i
if(Iend==1) { YesDone=1; return }
# 从后查到Iend,查找大于P(Iend-1)的最小的数,记入Ibeg
Ibeg=Iend
for (i=Ndat; i>=Iend; i--) { if (P[Iend-1]< P[i] && P[i]< P[Ibeg]) Ibeg=i }
#交换p[Ibeg]和p[Iend-1]
tmp=P[Ibeg]; P[Ibeg]=P[Iend-1]; P[Iend-1]=tmp
#倒置p[Iend]到p[Ndat]
j=Ndat
for(i=Iend; i< j; i++) { tmp=P[j]; P[j]=P[i]; P[i]=tmp
j--
}
}
'
组合
# Language: bash
awk ' BEGIN { m=6; n=4;
a[1]="A"; a[2]="B"; a[3]="C"; a[4]="D"; a[5]="E"; a[6]="F"
Comb(m,n)
#RecComb(m, n, 1, n)
}
function RecComb(m, n, start, count, i,j) { # 递归实现
for(i=start; i<=m+1-count; i++) { b[count]=i
if(count>1) RecComb(m, n, i+1, count-1);
else { for(j=n; j>0; j--) printf("%s ",a[b[j]]); print "" }
}
}
function Comb(m, n) { # 非递归
idx=1
p[idx]=1 #取第一个元素
while(1) { if(p[idx]>m) { #取到底了,回退
if(idx==1) break #各种情况取完了,不能再回退了
idx-- #回退到前一个
p[idx]++ #替换元素
} else if(idx==n) { #取够了,输出
for(i=1; i<=m; i++) printf("%s ", a[p[i]])
print ""
p[idx]++ #替换元素
} else { #多取一个元素
idx++
p[idx]=p[idx-1]+1
}
}
}
'
如果是在Python中, 就容易多了, 可参考下面的代码.
# Language: python
import copy
import random
import itertools
n=6
seqIni=list(itertools.combinations('ABCDEFGHIJ', n))
Nseq=len(seqIni)
print Nseq
fh = open("Comb", "w")
for i in seqIni :
k=' '.join([str(j) for j in i])
fh.write(k+"\n")
fh.close()
for Nrnd in range (1):
seq=copy.deepcopy(seqIni)
if Nrnd==1:
tmp=seq[1]
seq[1]=seq[Nseq-1]
seq[Nseq-1]=tmp
if(Nrnd>1): random.shuffle(seq)
# s="%d"%(Nrnd)
# fh = open("Comb"+s, "w")
# for i in seq :
# k=' '.join([str(j) for j in i])
# fh.write(k+"\n")
# fh.close()
Ntot=0
for i in range (Nseq):
if seq[i]!="":
Ntot += 1
# if(Ntot>17):
# print Ntot, seq[i]
# fh.write("%d "%(Ntot))
# for kk in seq[i] :
# k=' '.join([str(jk) for jk in kk])
# fh.write(k+" ")
# fh.write("
排列组合算法的实现代码相关推荐
- c语言两种排序方法的组合,排列和组合算法的实现方法_C语言经典案例
排列和组合算法是考查递归的常见算法,这两种算法能用递归简洁地实现. 本人在经过多次摸索和思考之后,总结如下,以供参考. 程序代码如下: #include #include char array[] = ...
- c语言排列组合的函数,c语言排列组合算法 排列和组合算法的实现方法_C语言经典案例...
想了解排列和组合算法的实现方法_C语言经典案例的相关内容吗,在本文为您仔细讲解c语言排列组合算法的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:c语言排列组合算法,下面大家一起来学习吧. ...
- 二进制全排列 java_排列组合算法真厉害,傻瓜都能学会
作者:枕边书来源:https://zhenbianshu.github.io/2019/01/charming_alg_permutation_and_combination.html 需求 最近工作 ...
- 二进制详解+集合算法的实现笔记
前言 本篇文章转载自iukey所写的<位运算的威力>(点击蓝色的'位运算威力',即可跳转到原文) 一.有关位运算的基础知识总结 位运算包括:&(与).|(或).^(异或).~(取反 ...
- Linux网络编程组播测试代码
Linux网络编程组播测试代码 (转载) 组播客户端代码如下: #include <sys/types.h> #include <sys/socket.h> #include ...
- android listview item 展开动画,android的ListView点击item使item展开的做法的实现代码
本文介绍了android的ListView点击item使item展开的做法的实现代码,分享给大家,具体如下: 效果图: 原理是点击item的时候,重新measure list的各个item的高度 li ...
- 排列组合 离散数学_排列组| 离散数学
排列组合 离散数学 排列组 (Permutation Group) Let, X be a non-empty set. A permutation of X is a one-one functio ...
- 基于python的梯度下降法的实现代码
基于python的梯度下降法的实现 代码: def _numerical_gradient_no_batch(f, x):h = 1e-4 # 0.0001grad = np.zeros_like(x ...
- 蓝桥杯2016c++A组真题代码第十题最大比例
蓝桥杯2016c++A组真题&代码第十题最大比例 /* 最大比例X星球的某个大奖赛设了M级奖励.每个级别的奖金是一个正整数. 并且,相邻的两个级别间的比例是个固定值. 也就是说:所有级别的奖金 ...
最新文章
- 易买网的一些增删改查
- 盘点提高国内访问 GitHub 的速度的 9 种方案
- Python 之父为什么嫌弃 lambda 匿名函数?
- 【NLP傻瓜式教程】手把手带你RCNN文本分类(附代码)
- OPENCV-PYTHON将.GIF格式的图像转为PNG格式
- 【记录】我在浙江省机器人大赛的第一天
- 一分钟关闭百度的搜索热点和相关人物
- mysql join不加关联条件的含义
- 从零实现深度学习框架——逻辑回归中的数值稳定
- Remoting示例
- ngnix有版本要求吗_新版本探秘:比赛/活动等其他系统的新增与优化~
- cs231n softmax作业笔记
- 如何使用轻快PDF阅读器编辑PDF文件
- vue.js3D立方体旋转播放特效
- kali linux虚拟机镜像的安装(详细手把手教你)
- 服务器简介(一):服务器定义、服务器特点、服务器分类、服务器软件
- 20分钟掌握前端编写 CLI 工具
- terraform 安装及命令
- 幂果支招:哪里找免费的Mac版音频剪辑软件
- 微软服务器管理员证书,微软认证 Azure 管理员培训
热门文章
- 【Android APT】编译时技术 ( 编译时注解 和 注解处理器 依赖库 )
- 【Android 异步操作】HandlerThread 示例 ( 初始化并执行 | 获取Looper | 获取 Handler | 获取消息队列 | 设置空闲队列 | 代码示例 )
- idea Empty git --version output:解决
- poj 3984
- 让tableView的高度等于contentSize的高度、动态调整tableView的高度、tableView的高度自适应布局...
- 【BZOJ4764】弹飞大爷 LCT
- Thread 小总结
- 套接字(socket)与socket 编程
- windows 程序员电脑设置
- iOS夯实:RunLoop