Johnson-Trotter算法求全排列

article/2025/9/25 18:37:03

在这里插入图片描述
在这里插入图片描述
下面我将贴出Johnson-Trotter算法的JAVA代码

package JT;import java.util.Scanner;public class Johnson_Trotter {//求最大的移动元素public static int maxk(int n, int[] array, boolean[] f) {//k存储最大移动元素的下标int k = -1, max = 0;for(int i = 0; i < n; i++) {//当前元素的方向是左边,则与左边的元素比较看是否可以移动//若可移动则与当前可移动最大值比较if(f[i] == false) {if(i > 0 && array[i] > array[i - 1] && array[i] > max) {k = i;max = array[i];}}//右边else {if(i < n - 1 && array[i] >array[i + 1] && array[i] > max) {k = i;max = array[i];}}}return k;}//元素和方向的交换public static int[] swap2(int[] array, boolean[] f, int i, int j) {int temp = array[i];array[i] = array[j];array[j] = temp;boolean temp1 = f[i];f[i] = f[j];f[j] = temp1;return array;}//调转方向public static boolean[] Reverseid(int[] array, int k, boolean[] f) {for(int i = 0; i < array.length; i++) {if(array[i] > array[k]) {f[i] = f[i] ? false : true;}}return f;}public static void Jt(int n) {//方向数组,false为左,true为右boolean[] flag = new boolean[n];//数字数组int[] idata = new int[n];//k为当前可移动元素的最大值int k = 0;//初始化两个数组for(int i = 0; i < n; i++) {idata[i] = i + 1;flag[i] = false;}//输出第一个初始化的排列,此排列不会自动生成for(int i = 0; i < n; i++) {System.out.print(idata[i]);System.out.print(flag[i]);}System.out.println();//初始化k,获取第一个可移动的最大元素k = maxk(n, idata, flag);//循环直到没有可移动的元素while(k != -1) {//可向右移动if(flag[k]) {//移动时,将元素和方向都交换idata = swap2(idata, flag, k, k + 1);//此时k所在的元素已经向右交换,k也需要对应加1k++;}//可向左移动else {idata = swap2(idata, flag, k, k - 1);k--;}flag = Reverseid(idata, k, flag);//调转所有大于k的元素的方向//输出当前的一个排列for(int i = 0; i < n; i++) {System.out.print(idata[i]);System.out.print(flag[i]);}System.out.println();k = maxk(n, idata, flag);//获取下一个k}}public static void main(String[] args) {System.out.print("Please put in n :");Scanner scan = new Scanner(System.in);int n = scan.nextInt();//输入nJt(n);//调用算法scan.close();}
}

代码运行结果如下:(false箭头为左,true箭头为右)

Please put in n :4
1false2false3false4false
1false2false4false3false
1false4false2false3false
4false1false2false3false
4true1false3false2false
1false4true3false2false
1false3false4true2false
1false3false2false4true
3false1false2false4false
3false1false4false2false
3false4false1false2false
4false3false1false2false
4true3true2false1false
3true4true2false1false
3true2false4true1false
3true2false1false4true
2false3true1false4false
2false3true4false1false
2false4false3true1false
4false2false3true1false
4true2false1false3true
2false4true1false3true
2false1false4true3true
2false1false3true4trueProcess finished with exit code 0

本文章为原创,转载请注明出处!
我的博客:https://www.cnblogs.com/yannick99/


http://chatgpt.dhexx.cn/article/QDx23qbw.shtml

相关文章

全源最短路Johnson算法

最短路Johnson算法( O ( n m l o g m ) O(nmlogm) O(nmlogm)) 可以求任意两点最短路&#xff0c; 新图的边权改造为&#xff1a; w ( x , y ) h ( x ) − h ( y ) w(x,y)h(x)-h(y) w(x,y)h(x)−h(y) 构造的新图 d 1 ( x , y ) d ( x , y ) h ( x ) − h ( y ) d1(x,y)d(x,y…

流水线作业调度问题-动态规划(运用Johnson算法)

问题描述 n个作业{1&#xff0c;2&#xff0c;…&#xff0c;n},要在由机器M1和M2组成的流水线上完成加工。每个作业加工的顺序都是先在M1上加工&#xff0c;然后在M2上加工。M1和M2加工作业i所需的时间分别为ai和bi。 要求确定这n个作业的最优加工顺序&#xff0c;使得从第一…

【随机算法】Johnson-Lindenstrauss Theorem 详细解读

前言 最近经常接触降维, 主要是做图像处理和视频处理的维度实在是比较多, 降维这个可真是真正的技术活儿, 而且在不同情况下降维的选择至关重要, 可以说会影响到最终的结果,今天主要是详细讲解一下其中一种当今的降维准则. Johnson-Lindenstrauss Theorem的问题定义 首先, JL要…

最短路径算法--Dijkstra算法,Bellmanford算法,Floyd算法,Johnson算法

最短路径算法 在交通地图上&#xff0c;两地点之间的路径通常标有长度&#xff0c;我们可以用加权有向来描述地图上的交通网。加权有向图中每条路径都有一个路径权值&#xff0c;大小为该路径上所有边的权值之和。本节将重点讨论顶点之间最短路径问题。在实际问题中&#xff0c…

在有向图中找出所有简单环--Johnson算法

注&#xff1a;本算法和计算图所有结点对最短路径的Johnson算法不同。 目录 综述 代码解析 实例解析 引用 综述 Johnson算法由B. Johnson发表于1975年&#xff0c;用于在一个有向图中寻找所有简单环。时间复杂度上界为O((ne)(c1))&#xff0c;空间复杂度为O(ne)&#xff0…

C#,图论与图算法,寻找加权有向图中所有顶点对之间的最短路径的约翰逊算法(Johnson‘s Algorithm)与源程序

一、最短路径问题 问题是找到给定加权有向图中每对顶点之间的最短路径&#xff0c;权重可能为负。我们已经讨论了这个问题的Floyd-Warshall算法。Floyd-Warshall算法的时间复杂度为Θ&#xff08;V3&#xff09;。利用Johnson算法&#xff0c;我们可以在O&#xff08;V2log VV…

最短路径算法——Dijkstra,Bellman-Ford,Floyd-Warshall,Johnson

本文内容框架&#xff1a; 1 Dijkstra算法 2 Bellman-Ford算法 3 Floyd-Warshall算法 4 Johnson算算法 5 问题归约 6 小结 常用的最短路径算法有&#xff1a;Dijkstra算法、Bellman-Ford算法、Floyd-Warshall算法、Johnson算法 最短路径算法可以分为单源点最短路径和全源最短路…

0018算法笔记——【动态规划】流水作业调度问题与Johnson法则

1、问题描述&#xff1a; n个作业{1&#xff0c;2&#xff0c;…&#xff0c;n}要在由2台机器M1和M2组成的流水线上完成加工。每个作业加工的顺序都是先在M1上加工&#xff0c;然后在M2上加工。M1和M2加工作业i所需的时间分别为ai和bi。流水作业调度问题要求确定这n个作业的…

转:johnson算法的现实意义

Johnson算法是一种用于解决边数与节点数之间关系为O(n^2)的带权图的最短路径问题的算法。它是一种结合了Dijkstra算法和Bellman-Ford算法的技术&#xff0c;通过使用一个负权重的环检测器来消除负权重的影响。这种算法的时间复杂度为O(n^2m log n)。 Johnson算法是一种用于解决…

软件定义网络SDN基础实验:MiniNet常用命令、创建网络拓扑、OpenFlow流表操作

此实验基于《软件定义网络实验1-5》&#xff0c;主要内容为&#xff1a; MiniNet常用命令如何创建网络拓扑OpenFlow流表操作 00x1 搭建SDN环境 SDN 环境配置&#xff1a;Mininet Ryu 1. 测试环境是否搭建成功 启动Ryu&#xff0c;进入 /ryu/app&#xff0c;启动一个交换机…

软件定义网络基础(SDN②)

一.传统网络设备 1.传统设备控制平面和数据平面 2.数据平面的任务 在传统网络中&#xff0c;数据平面是指实际传输和处理数据的部分。它包括网络设备&#xff08;如交换机和路由器&#xff09;&#xff0c;它们通过将数据包从一个接口转发到另一个接口来实现数据传输。数据平面…

软件定义网络SDN

一、为什么使用软件定义网络 传统网络及其设备只可配置&#xff0c;不可编程。网络的分布式控制与管理架构带来的制约&#xff0c;网络的部署、配置与管理需要落到每台设备上去手工完成&#xff0c;每个设备下都紧耦合了三个平面&#xff08;管理平面、控制平面、数据平面&…

软件定义网络技术现状分析

作者&#xff1a;郭春梅&#xff0c;启明星辰资深研究员&#xff0c;研究方向为云计算、虚拟化、SDN技术及安全 转载自&#xff1a;https://mp.weixin.qq.com/s?__bizMzAxNzExNjQ5NA&mid211287920&idx1&snd49893e9187e6055e79db8bb37e44408&scene1&fromg…

SDN软件定义网络相关概念

总结 软件定义网络&#xff0c;已经逐渐成为云计算所依赖的重要技术支一&#xff0c;软件定义网络作为一种新型的网络架构&#xff0c;把网络控制平面和数据平面进行分离&#xff0c;其中控制平面拥有网络全局视图&#xff0c;集中控制网络资源&#xff0c;数据平面只转发数据…

软件定义网络基础(SDN④)

一&#xff1a;SDN控制平面 一个或多个SDN控制器组成&#xff0c;是网络的大脑。 对底层网络交换设备进行集中管理&#xff0c;状态监测、转发决策以及处理和调 度数据平面的流量&#xff1b;通过北向接口向上层应用开放多个层次的可编程能力。 1.典型的SDN控制器体系架构 SDN控…

软件定义网络(SDN)工作原理

传统网络分布式控制架构: 管理平面: 管理设备&#xff08;SNMP&#xff09; 主要包括设备管理系统和业务管理系统&#xff0c;设备管理系统负责网络拓扑、设备接口、设备特性的管理&#xff0c;同时可以给设备下发配置脚本。业务管理系统用于对业务进行管理&#xff0c;比如业务…

认识软件定义网络(SDN)(一)

一、SDN体系结构简介 在传统IP网络中&#xff0c;网络设备内部同时集成了控制逻辑和数据逻辑&#xff0c;控制平面需要实现各种类型的网络协议和功能&#xff0c;为数据平面构造和配置路由转发表&#xff0c;而数据平面则根据路由转发表实现数据包的转发。一般来说&#xff0c…

SDN(Software Defined Network) 软件定义网络学习

SDN&#xff08;Software Defined Network&#xff09; 软件定义网络学习 SDN是啥&#xff1f; 简单来说就是软件定义网络&#xff01;其旨在对现有的网络架构进行重构&#xff0c;使得我们能够像安装软件一样对网络进行修改&#xff0c;加快部署&#xff0c;提高网络可编程能…

软件定义网络 Software Defined Network (一)概述

软件定义网络 Software Defined Network 本文将从以下3个问题对SDN进行阐述 1、为什么要有SDN&#xff1f; 伴随云计算、移动互联网和物联网的蓬勃兴起&#xff0c;应用与业务日益多元&#xff0c;而且快速且多变。网络系统的亚健康问题逐渐明显起来。传统网络工程的弊端日益…