首页 > 其他分享 >置换环

置换环

时间:2023-01-12 16:56:42浏览次数:42  
标签:int 置换 len vis arrpos cycelsize

1 作用

置换环是用来求解数组排序元素间所需最小交换次数这类问题。

置换环思想:置换环将每个元素指向其排序后应在的位置,最终首位相连形成一个环(若数字在最终位置,则其自身成环),可知元素之间的交换只会在同一个环内进行,而每个环内的最小交换次数为

\[环上元素数量 - 1 \]

我们将所有环的交换次数加起来得到

\[ans = \sum_i^n (cyclesize_i - 1) \]

其中\(cyclesize_i\)为环上元素数量

最后化简公式得,排序所需最小交换次数为数组长度-环的个数

图例:
image
其中环数为3数组长度为6,所以最小交换次数为3

2 代码

代码通过计算环上元素数量 - 1实现:

//置换环
pair<int, int> arrpos[len];//一维记录数值,一维记录位置
for(int i = 0;i < len;i++){
    arrpos[i].first = tmp[i];
    arrpos[i].second = i;
}
//跑次数
sort(arrpos,arrpos + len);
vector<int> vis(len,0);
for(int i = 0;i < len;i++){
    int cycelsize = 0;
    //自环或者访问过
    if(vis[i] || arrpos[i].second == i) continue;
    int j = i;
    while(!vis[j]){
        vis[j] = 1;
        j = arrpos[j].second;
        cycelsize += 1;
    }
    if(cycelsize > 0){
        ans += (cycelsize - 1);
    }
}

3 例题

逐层排序二叉树所需的最少操作数目

标签:int,置换,len,vis,arrpos,cycelsize
From: https://www.cnblogs.com/TTS-TTS/p/17047104.html

相关文章

  • 置换环
    关于置换环我们先从ABC241的E题引入题面如下:链接因为Atcoder不显示题面所以在洛谷上面看的哈哈输入输出样例输入#15321631输出#111输入#2101000000......
  • 抽象代数:置换群,Burnside 引理和 Polya 定理
    群群的定义给定集合\(G\)和二元运算\(\cdot\)满足如下性质:封闭性:\(\foralla,b\inG\),有\((a\cdotb)\inG\)结合律:\(\foralla,b,c\inG\),有\((a\cdotb)\cdot......
  • cf-置换环问题
      Problem-D-Codeforces题意:给你一个排列组合a数组,你每次操作可以交换某a数组中的某两个元素,求最小交换次数,使得得到的a数组中只含有一个逆序对解题思路:......
  • 深入理解【缺页中断】及FIFO、LRU、OPT这三种置换算法
    缺页中断(英语:Pagefault,又名硬错误、硬中断、分页错误、寻页缺失、缺页中断、页故障等)指的是当软件试图访问已映射在​​虚拟​​​​地址空间​​​中,但是目前并未被加载在......
  • OS@页面置换算法@抖动@工作集
    文章目录​​页面置换算法​​​​页面算法评价​​​​最佳置换算法OPT​​​​例​​​​先进先出算法FIFO​​​​最近最久未使用算法LRU​​​​时钟置换算法(CLOCK/NRU......
  • dataFrame把某列类型为array<double>或者array<string>数组里的值为null的置换为非nul
    ----把array<double>里的null值转换为0:df.withColumn("Value",replaceArrayNullToZeroUDF(col("Value")))defreplaceArrayNullToNOVALUEUDF=udf(replaceArrayNullToN......
  • 页式存储管理--两种置换算法的实现
    一.实验目的1.了解虚拟存储技术,通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解。2.掌握FIFO和LRU等置换算法,加强对地址转换过程的了解。二.实验内容......
  • [置换 前缀和]牛牛的猜球游戏
    [置换前缀和]牛牛的猜球游戏题目思路参考​​这篇题解​​​代码很简易,但是感觉还是有点难想到awa对于广义的前缀和来说,sum[r]就是到第r次操作为止,操作累积造成的影响。......
  • 页面置换算法练习题
    例:在一个请求分页存储系统中,一个进程的页面走向为4,3,2,1,4,3,5,3,2,1,设分配给该进程的内存块数M=4,采用FIFO和LRU页面置换算法(每调进一个新页认为发生一次缺页中断)。计算缺页次数和缺......
  • 页面置换算法:LRU和LFU
    目录页面置换算法简介LRU和LFU算法算法实现LRU算法题目:Leetcode.16.25思路代码实现LFU算法思路代码实现页面置换算法简介在地址映射过程中,若在页面中发现所要访问的页面......