C(m,n)算法
排列组合:C(m,n),m为给定数列,n为要从数列m中取元素的数量,GetResult()获取所有不重复的组合。
public class MathCombination<T>
{
List<T> list;
int count = ; private MathCombination()
{ } public MathCombination(List<T> l, int c)
{
list = l;
count = c;
} public List<List<T>> GetResult()
{
List<List<T>> result = new List<List<T>>();
List<Dictionary<int, T>> list = GetCombination();
foreach (Dictionary<int, T> item in list)
{
result.Add(item.Select(d => d.Value).ToList());
}
return result;
} private List<Dictionary<int, T>> GetCombination()
{
List<Dictionary<int, T>> result = new List<Dictionary<int, T>>(); List<Dictionary<int, T>> tempList = new List<Dictionary<int, T>>();
Dictionary<int, T> tempDic = new Dictionary<int, T>(); for (int i = ; i < list.Count; i++)
{
Dictionary<int, T> dic = new Dictionary<int, T>();
dic.Add(i, list[i]);
tempList.Add(dic); tempDic.Add(i, list[i]);
} result = tempList;
for (int i = ; i < count; i++)
{
result = GetCartesian(result, tempDic);
} return result;
} private List<Dictionary<int, T>> GetCartesian(List<Dictionary<int, T>> listDic, Dictionary<int, T> dic)
{
List<Dictionary<int, T>> result = new List<Dictionary<int, T>>();
foreach (Dictionary<int, T> d in listDic)
{
foreach (KeyValuePair<int, T> k in dic)
{
if (!d.ContainsKey(k.Key) && d.Keys.OrderByDescending(o => o).FirstOrDefault() < k.Key)
{
Dictionary<int, T> tempDic = new Dictionary<int, T>(d);
tempDic.Add(k.Key, k.Value);
result.Add(tempDic);
}
}
}
return result;
} }
调用:
List<decimal> listOdd = new List<decimal>() { 1.0M, 2.0M, 3.0M, 4.0M };
MathCombination<decimal> m = new MathCombination<decimal>(listOdd, );
List<List<decimal>> list = m.GetResult();
C(m,n)算法的更多相关文章
- B树——算法导论(25)
B树 1. 简介 在之前我们学习了红黑树,今天再学习一种树--B树.它与红黑树有许多类似的地方,比如都是平衡搜索树,但它们在功能和结构上却有较大的差别. 从功能上看,B树是为磁盘或其他存储设备设计的, ...
- 分布式系列文章——Paxos算法原理与推导
Paxos算法在分布式领域具有非常重要的地位.但是Paxos算法有两个比较明显的缺点:1.难以理解 2.工程实现更难. 网上有很多讲解Paxos算法的文章,但是质量参差不齐.看了很多关于Paxos的资 ...
- 【Machine Learning】KNN算法虹膜图片识别
K-近邻算法虹膜图片识别实战 作者:白宁超 2017年1月3日18:26:33 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
- 红黑树——算法导论(15)
1. 什么是红黑树 (1) 简介 上一篇我们介绍了基本动态集合操作时间复杂度均为O(h)的二叉搜索树.但遗憾的是,只有当二叉搜索树高度较低时,这些集合操作才会较快:即当树的高度较高(甚至一种极 ...
- 散列表(hash table)——算法导论(13)
1. 引言 许多应用都需要动态集合结构,它至少需要支持Insert,search和delete字典操作.散列表(hash table)是实现字典操作的一种有效的数据结构. 2. 直接寻址表 在介绍散列 ...
- 虚拟dom与diff算法 分析
好文集合: 深入浅出React(四):虚拟DOM Diff算法解析 全面理解虚拟DOM,实现虚拟DOM
- 简单有效的kmp算法
以前看过kmp算法,当时接触后总感觉好深奥啊,抱着数据结构的数啃了一中午,最终才大致看懂,后来提起kmp也只剩下“奥,它是做模式匹配的”这点干货.最近有空,翻出来算法导论看看,原来就是这么简单(先不说 ...
- 神经网络、logistic回归等分类算法简单实现
最近在github上看到一个很有趣的项目,通过文本训练可以让计算机写出特定风格的文章,有人就专门写了一个小项目生成汪峰风格的歌词.看完后有一些自己的小想法,也想做一个玩儿一玩儿.用到的原理是深度学习里 ...
- 46张PPT讲述JVM体系结构、GC算法和调优
本PPT从JVM体系结构概述.GC算法.Hotspot内存管理.Hotspot垃圾回收器.调优和监控工具六大方面进行讲述.(内嵌iframe,建议使用电脑浏览) 好东西当然要分享,PPT已上传可供下载 ...
- 【C#代码实战】群蚁算法理论与实践全攻略——旅行商等路径优化问题的新方法
若干年前读研的时候,学院有一个教授,专门做群蚁算法的,很厉害,偶尔了解了一点点.感觉也是生物智能的一个体现,和遗传算法.神经网络有异曲同工之妙.只不过当时没有实际需求学习,所以没去研究.最近有一个这样 ...
随机推荐
- 自动发现项目中的所有URL
我的rbac组件,是想用到任何一个,项目中的. so 问题来了. - 问题: 拿到一个项目. 怎样获取到,当前项目中, 所有的URL 以及 每个URL的别名name, 还有是有 namespace 命 ...
- c#task list waitall task waitany
上边的主线程会被卡住: 7个同时开发,谁先完成之后, 需要完成某个工作,可以用waitany 2: 不卡界面的做法 加上以上命令就不卡,是子线程做的事 //Task task = taskFactor ...
- 织梦文章里面的图片alt和title属性,用文章标题自动替换
把{dede:field.body/}改成{dede:field.body runphp=yes}global $dsql,$id,$aid;$myid = isset($id) ? $id : $a ...
- PAT 1046 划拳(15)(代码)
1046 划拳(15)(15 分) 划拳是古老中国酒文化的一个有趣的组成部分.酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字.如果谁比划出的数字正好等于两人喊出的数字之和,谁就赢 ...
- Maven 系列 二 :Maven 常用命令,手动创建第一个 Maven 项目
1.根据 Maven 的约定,我们在D盘根目录手动创建如下目录及文件结构: 2.打开 pom.xml 文件,添加如下内容: 1 <project xmlns="http://maven ...
- CentOS6.2网卡绑定配置
下面主要介绍在CentOS6.2下使用系统自带的bonding进行网卡绑定的详细步骤,在此之前你可以看一下Linux网卡绑定探析,你也可以使用网卡绑定的脚本进行网卡绑定操作. 注意:请在配置前关闭Ne ...
- AFNetworking HTTP响应头返回数据
//发送验证码 NSLog(@"发送验证码"); AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationM ...
- python httplib2应用get post
import httplib2,time #装饰器方法,用于记录方法消耗时间 #推荐将print 改成log def timer(func): def _warpper(self,*argv) ...
- 格式化输出之 每行N个元素 list拆分
for i in range(0,len(XSECT),5): out_BLDdat.write(' '.join( map('{:10.4f}'.format,XSECT[i:i+5]) ) + ' ...
- MySQL单行注释和多行释
单行注释:# 或者 -- 多行注释:/* ... */ 使用 # 时,# 和注释的内容之间可以没有空格 使用 -- 时,-- 和注释内容之间必须有空格