澳门太阳娱乐集团官网-太阳集团太阳娱乐登录

sqlserver 穷举 排列 组合
分类:脚本专栏

前天收看一篇博文 玩个算法题:1-5的排列组合难点认为挺风趣。鉴于博主写的是死代码,于是决定自个儿实现叁个动态排列穷举算法,难题抽象为平昔不重复成分集结n 中抽出 r 个要素实行排列,总共有多少种不相同的排列?

谜题

麻烦自身一天的一个算法难点,忽然灵光一闪,想到了,呵呵,个人感到还算满足。

代码如下:

穷举三个数组中逐个要素的排列

直白上最终结出。

#!/usr/bin/python# -*- coding:utf-8 -*-from copy import copy# 排列穷举练习# 从 集合 n 中选取 r 个元素进行排列,穷举所有排列# n,待排列元素组成的集合,可以是 list 或者 set 或者 tuple# r,从 n 中选取 r 个元素,进行排列# return, listdef permute: if len < len: # 有重复元素 raise error n = tuple item_count = len if item_count < r: # r 不能大于 n 元素的个数 raise error("r 不能大于 n 中元素的数目") flag = [0 for x in xrange] # 根据 flag 从 n 中取元素 def permute_with_flag: source = list target = [] for x in flag: target.append(source[x]) source.remove(source[x]) return target # 输出 # flag 自增算法 # 自增到最大值时 return False def increse_flag: flag[0] += 1 for x in xrange(0,len: if flag[x] == item_count - x: flag[x] = 0 if x+1 < len: flag[x+1] += 1 if flag.count == len: return False return True permutation = [permute_with_flag] while increse_flag: permutation.append(permute_with_flag return permutation def main(): n = set((1, 2, 3, 4, 5)) m = permute for x in m: print xif __name__ == '__main__': main()

策略

太阳集团太阳娱乐登录 1

减而治之、递归

问 : 从 n个数中取r个数 穷举呈现全数排列 和 组合

JavaScript解

 

太阳集团太阳娱乐登录, T-sql  解:

复制代码 代码如下:

 

/**
 * Created by cshao on 12/23/14.
 */

IF EXISTS ( SELECT  *
            FROM    sys.objects
            WHERE   object_id = OBJECT_ID(N'[dbo].[number]')
                    AND type IN ( N'U' ) )
    DROP TABLE [dbo].[number]

function getPermutation(arr) {
  if (arr.length == 1) {
    return [arr];
  }

CREATE TABLE number
    (
      num INT NOT NULL
              PRIMARY KEY
 --, NameValue varchar(100)     大肆名字你懂的。
    )

  var permutation = [];
  for (var i=0; i<arr.length; i++) {
    var firstEle = arr[i];
    var arrClone = arr.slice(0);
    arrClone.splice(i, 1);
    var childPermutation = getPermutation(arrClone);
    for (var j=0; j<childPermutation.length; j++) {
      childPermutation[j].unshift(firstEle);
    }
    permutation = permutation.concat(childPermutation);
  }
  return permutation;
}

--搞5个数字进去
DECLARE @i INT
SET @i = 1
WHILE @i <= 5
    BEGIN
        INSERT  INTO dbo.number
                ( num )
        VALUES  ( @i )
        SET @i = @i + 1
    END

var permutation = getPermutation(['a','b','c']);
console.dir(permutation);

--展现全部排列
SELECT  *
FROM    dbo.number AS t1
        CROSS JOIN dbo.number AS t2
WHERE   t1.num <> t2.num
 
--呈现全体组成
SELECT  *
FROM    dbo.number AS t1
        CROSS JOIN dbo.number AS t2
WHERE   t1.num < t2.num  

结果

 

复制代码 代码如下:

搞个篮赛,足球赛的比赛日程表就一下子出来了。

[ [ 'a', 'b', 'c' ],
  [ 'a', 'c', 'b' ],
  [ 'b', 'a', 'c' ],
  [ 'b', 'c', 'a' ],
  [ 'c', 'a', 'b' ],
  [ 'c', 'b', 'a' ] ]

 

你或然感兴趣的稿子:

  • javascript concat数组累加 示例
  • JavaScript求一组数的最小公倍数和最大公约数常用算法详解【面向对象,回归迭代和循环】
  • JavaScript中的迭代器和生成器详解
  • JS的数组迭代方法
  • js数组的七种迭代方法及二种归并方法(推荐)
  • JavaScript选择递归算法计算阶乘实例
  • JavaScript递归算法生成树形菜单
  • JS基于递归算法完毕1,2,3,4,5,6,7,8,9倒序放入数组中的方法
  • JavaScript黑洞数字之运算路径查找算法(递归算法)实例
  • JavaScript落到实处多叉树的递归遍历和非递归遍历算法操作示例
  • JavaScript累加、迭代、穷举、递归等常用算法实例小结

 

本文由澳门太阳娱乐集团官网发布于脚本专栏,转载请注明出处:sqlserver 穷举 排列 组合

上一篇:制作简历 把简历作为产品深入分析 下一篇:没有了
猜你喜欢
热门排行
精彩图文