数学与泛型编程   https://blog.csdn.net/nameofcsdn/article/details/110448717

目录

一,映射、变换、置换

1,映射

2,变换

3,置换

二,变换群、置换群、对称群(全置换群)

1,变换群

2,置换群

3,对称群(全置换群)

三,凯莱定理

四,换位

五,置换分解成循环

六,交换两个区间

七,旋转(rotation)

八,利用循环来执行旋转

九,倒置


一,映射、变换、置换

1,映射

集合A到集合B可以定义一个映射。

映射根据是否是单射,是否是满射,可以分为非单非满映射、单射非满射、满射非单射、一一映射四种。

2,变换

集合A到自身的映射,叫做变换。

很自然的就有集合A上的单射变换、满射变换和一一变换。

一一映射、一一变换、恒等映射、恒等变换都是一个意思。

3,置换

如果A是有限集合,那么A上的变换叫做置换。

标准记法:

简化记法:

(2 4 1 3)

二,变换群、置换群、对称群(全置换群)

1,变换群

由若干变换为元素,复合作为运算的群,叫做变换群。

2,置换群

由若干置换为元素,复合作为运算的群,叫做置换群。

3,对称群(全置换群)

由n个元素的全部置换所构成的群,称为对称群Sn,也叫全置换群。

根据定义,对称群具备下列属性:

二元运算:复合(composition,该运算具备结合性)

取逆运算:逆置换(inverse permutation)

单位元素:恒等置换(identity permutation)

三,凯莱定理

凯莱定理:凡是元素个数为n的群,都与对称群Sn的某子群同构。

// TODO:这个定理的证明没怎么研究。

四,换位

换位,是交换第i与第j个元素(i≠j),并保持其余元素不动的置换。

C++中的交换swap和换位意思差不多。

swap操作只要求其参数满足Semiregular这一concept即可,不一定非得是Regular才行。

换位引理:任何一种置换方式,都是若干换位的乘积。

五,置换分解成循环

置换可以分解成若干个循环。

这种分解可以记为(235614)=(1235)(46)

包含一个元素的循环,称为平凡循环。

每个长度为k的非平凡循环,都需要用k+1次赋值操作才能完成。

原地执行任意一种置换方式,需要使用n-u+v次赋值操作,其中n是元素个数,u与v分别是该置换方式中的平凡与非平凡循环个数。

六,交换两个区间

可以用first0与last0来表示第一个区间的左界和右界,并且用first1来表示第二个区间的左界:

我们为了能在数据上面调用swap操作,必须保证I0的值类型与I1的值类型相同。由于concept还未正式融入C++语言,因此我们在代码中,暂时以注释来表达这一要求。

这里演示了一条重要的编程原则:类型分离原则。

如果两份数据有可能是不同的类型,那么就不要假设它们必然是同一个类型。

上面的2个迭代器类型可以不同,所以我们可以用来交换链表的一段和数组的一段。

七,旋转(rotation)

将n个元素根据k值(k≥0)做如下形式的转置:(k mod n,k+1 mod n,...,k+n-2 mod n,k+n-1 mod n)称为n个元素的k次旋转。

旋转的Gries-Mills算法:

如果rotate算法,能够返回参数m在算法执行完毕时所具备的新值,那么会对很多计算场景都有所帮助,因为该值反映了旋转前的首个元素,在旋转后所处的位置。有了这个值,就可以通过rotate(f,rotate(f,m,l),l)来实现恒等置换。

算法的赋值次数是 3(n-gcd(n,k))

Gries-Mills算法每次移动时,都只需前进一个位置,也就是说,该算法可以用于单链表这样的数据结构。

八,利用循环来执行旋转

n个元素的k次旋转,含有gcd(k,n)个循环,因此,只需做n+gcd(k,n)次赋值即可。

借助循环来实现的旋转算法,需执行跨度大于1的跳跃,这意味着它对迭代器的要求比前者高,换句话说,它要求迭代器必须支持随机访问。

首先我们实现单个循环:

template <ForwardIterator I, Transformation F>
void rotate_cycle_from(I i, F from) {ValueType<I> tmp = *i;I start = i;for (I j = from(i); j = start; j = from(j)) {*i = *j, i = j;}*i = tmp;
}

这个rotate_cycle_from函数可以完成迭代器i所在的循环,from是跳跃访问的迭代器,可以把from(i)理解成:计算i位置上的元素来自何处。

利用循环来执行旋转:

九,倒置

倒置(reverse)就是对含有k个元素的列表进行置换,使得第0个与第k-1个元素互换、第1个与第k-2个元素互换,依此类推。

用倒置实现旋转:

数学与泛型编程(7)置换算法相关推荐

  1. 数学与泛型编程(2)群论

    数学与泛型编程   https://blog.csdn.net/nameofcsdn/article/details/110448717 数的认知(3)--加减乘除.群环域   https://blo ...

  2. 数学与泛型编程(6)编程的基本概念

    数学与泛型编程   数学与泛型编程(1)埃及乘法.加法链_nameofcsdn的博客-CSDN博客_数学与泛型编程 目录 一,范畴篇 二,类型type.概念concept 三,类型函数及类型属性函数 ...

  3. 先进先出置换算法(FIFO)

    最简单的页面置换算法是先入先出(FIFO)法.这种算法的实质是,总是选择在主存中停留时间最长(即最老)的一页置换,即先进入内存的页,先退出内存.理由是:最早调入内存的页,其不再被使用的可能性比刚调入内 ...

  4. 最佳置换算法(OPT)

    这是一种理想情况下的页面置换算法,但实际上是不可能实现的.该算法的基本思想是:发生缺页时,有些页面在内存中,其中有一页将很快被访问(也包含紧接着的下一条指令的那页),而其他页面则可能要到10.100或 ...

  5. 三十七、页面置换算法

    一.知识总览 请求分页存储管理与基本分页存储管理的主要区别: 在程序执行的过程中,当所访问的信息不再内存中时,由操作系统负责将所需信息从外存调入内存,然后继续执行程序. 若内存空间不够,由操作系统负责 ...

  6. 页面置换算法简单对比----《operating system concepts》《操作系统原理》

    置换策略 当请求调页程序要调进一个页面,但是该作业分配所得的主内存块已经全部用完,则必须淘汰改作业在贮存中的一个页面.置换算法就是决定选择哪一个页面进行淘汰的规则. 如置换算法不够好,就会导致刚淘汰的 ...

  7. 【操作系统】考研の页面置换算法例子(看不懂你来打我~!)

    文章目录 1 缺页率 2 页面置换算法 1 缺页率 缺页率=缺页次数/缺页次数+访问成功次数 2 页面置换算法 根据页面走向,使用先进先出页面淘汰算法时,页面置换情况见下表. 物理块数为3时: 走向 ...

  8. linux页面置换的存储,3.4.4 第二次机会页面置换算法

    3.4.4   第二次机会页面置换算法 FIFO算法可能会把经常使用的页面置换出去,为了避免这一问题,对该算法做一个简单的修改:检查最老页面的R位.如果R位是0,那么这个页面既老又没有被使用,可以立刻 ...

  9. linux存储--页面置换算法(十一)

    选择调出页面的算法就称为页面置换算法.好的页面置换算法应有较低的页面更换频率,也就是说,应将以后不会再访问或者以后较长时间内不会再访问的页面先调出. 常见的置换算法有以下四种 1. 最佳置换算法(OP ...

  10. 页面置换算法 - FIFO、LFU、LRU

    缓存算法(页面置换算法)-FIFO. LFU. LRU 在前一篇文章中通过leetcode的一道题目了解了LRU算法的具体设计思路,下面继续来探讨一下另外两种常见的Cache算法:FIFO. LFU ...

最新文章

  1. macOS配置Apache服务器
  2. 学习 ---AJAX如何用于Web部件
  3. 35 mysql 备份与恢复
  4. 10 | 软件测试工程师需要掌握的非测试知识有哪些?
  5. 如何将Wav文件做到EXE文件里
  6. Informix IDS 11体系操持(918测验)认证指南,第 4 部门: 机能调优(1)
  7. 要高薪地进入IT,你得这样做
  8. 天猫超市回应“大数据杀熟”传言:系新人专享价未显示
  9. CODE Unicode roleName_字符类型数据 人物名子
  10. mailR:利用R语言发邮件
  11. linux命令df命令全称,df命令--Linux命令应用大词典729个命令解读
  12. 云计算是什么?它有哪些形式?
  13. Linux CreateRepo创建Repomd (xml-rpm-metadata)存储库
  14. httprunner3.x使用过程中遇到的问题
  15. HTML5七夕情人节表白网页❤抖音超火的樱花雨3D相册❤ HTML+CSS+JavaScript
  16. 字节跳动2023届校招薪资盘点!
  17. Sybase ASE 查询当前版本和所有数据库
  18. 机械革命 Code Go 评测
  19. Pr 入门教程如何创建动画开头标题?
  20. “P2P网络“在区块链当中扮演的角色

热门文章

  1. DirectX 9.0 (5) 点光源
  2. Python实战 | 使用代理IP刷CSDN博客访问量
  3. dev、test和staging、prod是什么意思?
  4. 安装黑苹果双系统小记(昂达B365+EFI)
  5. Unity获取IOS端相机权限的状态
  6. 顺序结构—— 华氏温度转摄氏温度
  7. Android竖屏视频录制
  8. 关于音频情感分类的随笔(4)
  9. uva 11137 Ingenuous Cubrency(完全背包)
  10. 卸载office2007不干净问题