置换环算法

2023-11-08

在这里插入图片描述

置换环算法

——2023.05.22

这是由abc302—G所带来新的算法学习——置换环
虽然但是我还是没弄懂G是怎么写的,烦死啦

置换环的作用

  • 求出通过交换数组的元素的最少次数,来得到按照某种指定规则进行排序的数组

核心思想

  • 将每个位置(i)上的元素指向它本应该在的位置(j),即连一条有向边<i,j>
  • 这样一来,每个位置都处在环上(如果某个位置上的数指向自己,那么这个位置自环)
  • 手玩(手动模拟)一下就可以知道,每个环中的交换次数最少为 环内点数 - 1
  • 数组的最小交换次数 = Σ(每个环)(环内点数 - 1) = 数组大小 - 环的数量
    在这里插入图片描述

理解

为什么每个位置一定处在环上呢?

我们以每个位置的出度和入度为切入点进行分析。

∵ 数组的每个位置(i)上都存在一个数,而这个数,一定有一个它本应该处在的位置(j),
   按照置换环的核心思想,我们应该连一条<i,j>

∴ 每个位置的出度为 1

∵ 每个位置(i)都一定属于某个位置(k)上的数
   按照置换环的核心思想,我们应该连一条<k,i>

∴ 每个位置的入度为 1

综上所述,每个位置的入度和出度分别为 1,总度数为 2

现假设存在一个位置不在环上

那么这个位置一定存在于链上,而链的端点要么入度为 1,要么出度为 1,与上述结论矛盾,所以假设不成立

所以 每个位置一定处在环上

为什么一定要在环内进行交换操作才能得到最小交换次数呢?

我的理解是,环其实代表的其实是一种范围

如果 环i中的点 和 环j中的点 交换,不仅无效,而且可能会造成更坏的结果

因为每个位置i指向的位置j都是环内的点,所以我们只需要摆正环内的位置即可

所以我们应该在环内进行交换
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

置换环算法 的相关文章

随机推荐

  • Scroller startScroll() fling() 参数详解

    fling Start scrolling based on a fling gesture The distance travelled will depend on the initial velocity of the fling p
  • 关于js if(“变量”){} 总结

    在前台进行if 变量 判断的时候当 变量 为一些特殊值时 就会有点分不清楚 为了加深记忆现在在这里做一下总结 var a null if a console log true else console log false 结果 false
  • 十二、Docker日志管理

    Docker日志管理 Docker的日志大致有两种 一是Docker 引擎日志 也就是 dockerd服务自身运行时的日志 二是容器内的服务产生的日志 后一种有一定使用经验的童鞋应该发现有时候我们能通过docker logs查看容器日志 有
  • 计算机音频知识,音频视频基本知识介绍.ppt

    音频视频基本知识介绍 Here again they have theoretically seen the different connectors here we need to explain them a bit As far as
  • Android logcat调试工具的重定位输出日志

    在tools目录里面 命令行中输入adb logcat gt d 1 txt即可
  • 设置title提示框的样式

    默认的title不能设置样式 通过js和css实现title的功能 css样式 html代码 span span
  • 程序员的底层思维:逻辑思维

    更多关于思维能力的内容 尽在我的新书 程序员必备的思维能力 你讲话要有逻辑 你这逻辑不对 你的底层逻辑是什么 说说你的逻辑思维能力体现在哪儿 在日常交流中 我们会频繁的使用 逻辑 这个词 但能够清晰的说出逻辑的定义 什么是逻辑 应该不多 能
  • 安装anaconda 报错 failed to create menus

    报错发现百度搜索的解决办法五花八门 实际试过几个不能有效解决问题 遂专心研究出错日志 发现报错找不到python3 X dll 遂猜测是未安装好python3 7所致 回忆起可能是与安装的是32位而不是64位的版本有关 遂卸载python3
  • Julia教程:Julia语言入门

    正如我在 朱莉娅是什么 Julia是一种用于数值计算的免费开源高级 高性能动态编程语言 它将动态语言的开发便利性与已编译的静态类型语言的性能相结合 它设计用于科学计算 机器学习 数据挖掘 大规模线性代数 分布式计算和并行计算 并且易于使用P
  • 【深度探索STL】空间配置器(三) 第二级配置器

    考虑到小型区块所可能造成的内存破碎问题 SGI 设计了双层级配置器 第一级配置器参见博文 http blog csdn net wenqian1991 article details 19566499 这里则学习第二级配置器 第二级配置器的
  • plsql的安装与部署

    plsql是什么 PL SQL Developer是一个集成开发环境 专门开发面向Oracle数据库的应用 PL SQL也是一种程序语言 叫做过程化SQL语言 Procedural Language SQL PL SQL是Oracle数据库
  • GMAT Sentence Correction(3): 时态

    Sentence Correction句子改错是GMAT考试中的一个项目 用于考察正式英语的书写能力 通过研究GMAT句子改错可以提高英语语法 遣词造句更加严谨整洁 tense时态问题属于GMAT Sentence Correction考察
  • grpc之Java实战proto文件篇

    grpc之Java实战proto文件篇 proto文件的编写 什么是protobuf proto文件的编写 通过proto文件生成代码需要的pom依赖 protobuf插件在idea的安装 proto文件的编写 什么是protobuf 协议
  • FreeRTOS问题

    RTOS面试常问题目 freertos面试题 Ricardoxxx的博客 CSDN博客 一 freertos问从上电到启动的流程 任务有几种优先级 任务调度有哪几种方式 对freertos的认识和理解 1 freertos问从上电到启动的流
  • java double 小数点后两位小数_java实现double保留小数点后两位小数

    一 返回double型的 1 能四舍五入double d 114 145 d double Math round d 100 100 System out println d 2 BigDecimal ROUND HALF UP表示四舍五入
  • python冲击二级---基本库turtle,海龟绘图详解,史上最全,没有之一

    turtle 海龟绘图 海龟绘图很适合用来引导孩子学习编程 最初来自于 Wally Feurzeig Seymour Papert 和 Cynthia Solomon 于1967 年所创造的 Logo 编程语言 请想象绘图区有一只机器海龟
  • 软工实习日记14

    今天的主要工作是使用shiro框架实现权限管理以及熟悉springcloud eureka 下面将给出关键代码和流程 controller层 LoginController java PostMapping login public Str
  • AI绘画 stable diffusion Midjourney 官方GPT文档 AIGC百科全书资料收集

    教学AI绘画 AIGC工具 SD教程 推荐阅读 AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转cloud Studio 在线编码神器 玩转 GPU AI绘画 AI讲话 翻译 GPU点亮AI想象空间 AIGC和
  • Prometheus 源码解读(一)

    Prometheus 源码解读 一 Prometheus 是云原生监控领域的事实标准 越来越多的开源项目开始支持 Prometheus 监控数据格式 从本篇开始 我将和大家一起阅读分析 Prometheus 源码 学习 Prometheus
  • 置换环算法

    置换环算法 2023 05 22 这是由abc302 G所带来新的算法学习 置换环 虽然但是我还是没弄懂G是怎么写的 烦死啦 置换环的作用 求出通过交换数组的元素的最少次数 来得到按照某种指定规则进行排序的数组 核心思想 将每个位置 i 上