zoukankan      html  css  js  c++  java
  • 分治法 全排列问题的一个Java实现

    public class Perm
    {
      public static void perm(Object[] a, int k, int m)
      {
        if (k == m)
          for (int i = 0; i < a.length; i++)
            System.out.print(a[i]);
          System.out.println();     
    else     {       for (int i = k; i <= m; i++)       {
            swap(a, k, i);
            perm(a, k
    + 1, m);
            swap(a, k, i);       }     }   }
      
    public static void main(String[] args)
      {
        Integer[] a = new Integer[6];
        for (int i = 0; i < a.length; i++)
          a[i] = new Integer(i);
        perm(a, 0, 5);
      }

      public static void swap(Object[] a, int i, int j)
      {
        Object temp = a[i];
        a[i] = a[j];
        a[j] = temp;
      }
    }

    算法思想:

    对n个元素的数组进行全排列,

    如果n = 1则无需排列;

    如果n >= 2,则对首个元素的取可能的所有值,后面n-1个元素进行全排列(递归)。

    时间复杂度:
    T(n) = n (T(n-1) + b) = Θ(n*n!)

  • 相关阅读:
    C#连接数据库的三种方法
    远程控制mysql出现的问题
    DFS_子集
    DFS_全排列
    Centos下搭建Mysql
    Nginx与PHP(FastCGI)的安装、配置与优化
    Centos下主DNS的搭建
    Nginx的基本配置与优化
    Nginx服务器的安装与配置
    gdb基本命令
  • 原文地址:https://www.cnblogs.com/wylz/p/3721177.html
Copyright © 2011-2022 走看看