C#语法灵活运用之排列组合算法
今天群里有朋友求一个排列组合算法,题目是给定长度,输出所有指定字母的组合。
如指定字母a、b、c、d、e、f,长度为2,则结果应为:aa、ab、ac ... ef、ff。
有朋友给出算法,很有特色:
var n = 0;
for (int i = 0; i < Math.Pow(26, n); ++i)
{
int t = i;
string str = "";
for (int j = n - 1; j >= 0; --j)
{
int s = (int)Math.Pow(26, j);
str += ((char)('a' + t / s)).ToString();
t %= s;
}
Console.Write(str + " ");
}
他的解法假定字母组合就是26字母,则看成26进制,非常有创意。
而我则想到,这个问题可以剥离,逐层追加到指定的长度,并且可以批量处理。
于是创造了一个全新的算法:
public List<string> GetList(List<string> src, int num)
{
var res = src;
for (int i = 1; i < num; i++)
{
res = (from s in src
from r in res
select s + r).ToList();
}
return res;
}
我的算法是根据指定长度,从一开始,逐层增加元素,每加一次,都是笛卡尔乘积,并且充分利用linq语法的精炼和内部阵列算法的优化,因此我的这个算法非常高效而简洁。
因此记录在此,以备参考
C#语法灵活运用之排列组合算法的更多相关文章
- 排列组合算法(PHP)
		用php实现的排列组合算法.使用递归算法,效率低,胜在简单易懂.可对付元素不多的情况. //从$input数组中取$m个数的组合算法 function comb($input, $m) { if($m ... 
- python实现高效率的排列组合算法-乾颐堂
		组合算法 本程序的思路是开一个数组,其下标表示1到m个数,数组元素的值为1表示其下标 代表的数被选中,为0则没选中. 首先初始化,将数组前n个元素置1,表示第一个组合为前n个数. 然后从左到右扫描数组 ... 
- 排列组合算法的javascript实现
		命题:从成员数为N的集合S中,选出M个元素,分别求其排列与组合结果集,即 A(N, M)与C(N, M) js解法: function queue(arr, size){ if(size > a ... 
- 排列组合算法(基于c++实现)
		排列 全排列是将一组数按一定顺序进行排列,如果这组数有n个,那么全排列数为n!个.现以{1, 2, 3}为例说明如何编写全排列的递归算法 第一层S1表示第一个数分别与第1.2.3个数交换位置,如123 ... 
- c语言中一种典型的排列组合算法
		c语言中的全排列算法和组合数算法在实际问题中应用非常之广,但算法有许许多多,而我个人认为方法不必记太多,最好只记熟一种即可,一招鲜亦可吃遍天 全排列: #include<stdio.h> ... 
- 针对较大基数的排列组合算法Java实现类(n选m)
		package com.utils; import java.math.BigDecimal; import java.math.RoundingMode; public class PLZUUtil ... 
- C(n,m)排列组合算法
		主要解决C(n,m)问题 static class Extension { public static IList<IList<T>> GetGroup<T>(th ... 
- 排列组合算法的Java实现
		转载于:http://cgs1999.iteye.com/blog/2327664 
- N个数组中所有元素的排列组合(笛卡尔积)算法
		(1)N个数组对象中所有元素排列组合算法 private List<List<Object>> combineAlg(List<Object[]> nArray) ... 
随机推荐
- Linux之Qt利用Sqlite静态编译库(转)
			参考:http://www.linuxidc.com/Linux/2011-11/47465.htm sqlite3编译安装 ------------------------arm版--------- ... 
- MSP430设置串口波特率的方法
			给定一个BRCLK时钟源,波特率用来决定需要分频的因子N: N = fBRCLK/Baudrate 分频因子N通常是非整数值,因此至少一个分频器和一个调制阶段用来尽可能的接 ... 
- C#中的async和await
			其实这两个关键字的功效比之前的异步方法调用有一个好处,那就是异步阻塞的方法可以有返回值.之前都是通过回调函数实现,执行上下文会切换,不过和这个执行过程类似.可以对这两个关键字这么理解:遇到async的 ... 
- nginx相关配置说明
			基础: nginx配置文件主要分为六个区域:main section.events section.http section.sever section. location section.upstr ... 
- 关于jQuery中的submit()函数
			关于jQuery中的submit()函数(绑定event handler or 触发event?) 今天在敲代码的时候无意间碰到了一个比较绕的问题(一个小师弟问的问题),思前想后都不明白,上午百度.谷 ... 
- bzoj1513: [POI2006]Tet-Tetris 3D
			Description Task: Tetris 3D "Tetris" 游戏的作者决定做一个新的游戏, 一个三维的版本, 在里面很多立方体落在平面板,一个立方体开始落下直到碰上一 ... 
- Eclipse 配置Activiti插件
			Eclipse 配置Activiti插件 我使用的是Eclipse LUNA 4.4.0 点击Eclipse上方工具栏[Help]选择[Install New Software] 在弹出的窗口点击[A ... 
- BP(back propagation)反向传播
			转自:http://www.zhihu.com/question/27239198/answer/89853077 机器学习可以看做是数理统计的一个应用,在数理统计中一个常见的任务就是拟合,也就是给定 ... 
- Linq系列
			LINQ 图解 Linq中的Select——投影 Linq学习资源 Expert C# 5.0中的Linq部分 
- springmvc跳转和重定向
			如果springmvc返回的视图中带有redirect:或者forward:,springmvc会进行特殊处理, redirect:会执行重定向,forward:会执行转发操作! @RequestMa ... 
