美文网首页
算法中的排列组合问题

算法中的排列组合问题

作者: 436宿舍 | 来源:发表于2020-03-10 18:38 被阅读0次

一、全排列:

算法:

    递归:

         先确定第一个元素,对后面的全排列;

        将后面元素逐渐与第一个交换,然后对除第一个之外的进行全排列;

        代码:直接考虑了重复元素的情况

package main

import "fmt"

var (

inputs []int

)

func main() {

inputs =append(inputs, 3, 1,1, 2)

perm(0, len(inputs))

}

func perm(m, nint) {

switch {

case m == n:

for i :=0; i < n; i++ {

fmt.Print(inputs[i], " ")

}

fmt.Print("\n")

case m < n:

for i := m; i < n; i++ {

if !needSwitch(m, i) {

continue

        }

inputs[m], inputs[i] = inputs[i], inputs[m]

perm(m+1, n)

inputs[m], inputs[i] = inputs[i], inputs[m]

}

}

}

func needSwitch(m, iint)bool {

for j := m; j < i; j++ {

if inputs[j] == inputs[i] {

return false

      }

}

return true

}

        

    字典序

    思路:

        1·、先对所有的元素进行一个排序,从小到大;

        2、找到后面所有的字典序;

    找下一个字典序的方法:

        1、先找到第一个破坏逆序的元素i;

        2、从元素i后面开始找到大于元素i的,最小的那个元素j;

        3、对元素i和元素j进行互换;(此时i位置元素后面的元素为逆序的)

        4、对i后面的逆序元素进行一个逆序,变为顺序的,此时出现的列表即为 序列的下一个字典序;

    代码:golang

        package main

import (

"fmt"

"sort"

)

var (

inputs []int

)

func main(){

inputs =append(inputs,1,2,3)

sort.Ints(inputs)

fmt.Print(inputs,"\n")

n :=len(inputs) -1

  var kint

  for ;nextPerm(n);k++{

fmt.Print(inputs,"\n")

}

}

func nextPerm(nint)bool{

var i,jint

  for i = n;i>0;i--{

if inputs[i-1] < inputs[i]{

break

      }

}

if i==0{

return false

  }

for j= n;j>i-1 ;j--{

if inputs[j]> inputs[i-1]{

break

      }

}

inputs[i-1],inputs[j] = inputs[j],inputs[i-1]

sort.Ints(inputs[i:])

return true

}

相关文章

  • 算法中的排列组合问题

    一、全排列: 算法: 递归: 先确定第一个元素,对后面的全排列; 将后面元素逐渐与第一个交换,然后...

  • 排列组合-js

    排列组合 数学相关知识:5分钟彻底了解排列组合 参考:程序员必备算法——排列组合 排列有序,组合无序 3选2 :排...

  • 回溯算法

    【回溯算法】在 最优解、排列组合、解空间搜素 中存在典型应用 【动态规划】和【贪心算法】都要求 无后效性,即 子问...

  • python 中的排列组合问题

    1. python 中取两个集合的交、差、并集。 fruite 与 vegetables 的并集为:{'t', '...

  • TODO:排列组合问题:n个数中取m个

    TODO:排列组合问题:n个数中取m个 排列组合是组合学最基本的概念。所谓排列,就是指从给定个数的元素中取出指定个...

  • 排列组合问题

    为什么要写这篇文章 排列组合问题在数学中占有重要的地位,其与概率论也有密切的关系。而且排列组合问题大量出现在求职笔...

  • 搜索-组合

    刷题学习的第一类算法,由深度优先搜索DFS引申出的,排列组合算法。在一个给定长度n的数组中取出k个数,做组合或者排...

  • 迷人的算法-排列组合

    需求 最近工作中碰到一个需求:我们的数据表有多个维度,任意多个维度组合后进行 group by 可能会产生一些”奇...

  • 排列组合算法

    排列 排列概念 从m个不同元素中,任取n(n<=m)个元素按照一定的顺序排成一列,叫做从m个不同元素中取出n个元素...

  • 排列组合算法

    组合算法 非递归算法 组合算法的思路是开一个数组,其下标表示1到m个数,数组元素的值为1表示其下标代表的数被选中,...

网友评论

      本文标题:算法中的排列组合问题

      本文链接:https://www.haomeiwen.com/subject/ryxpdhtx.html