算法集锦(四)AlanTu

在快速排序算法中,使用了分治策略。首先把序列分成两个子序列,递归地对子序列进行排序,直到整个序列排序结束。

步骤如下:

在序列中选择一个关键元素做为轴;

对序列进行重新排序,将比轴小的元素移到轴的前边,比轴大的元素移动到轴的后面。在进行划分之后,轴便在它最终的位置上;

递归地对两个子序列进行重新排序:含有较小元素的子序列和含有较大元素的子序列。

下面的动画展示了快速排序算法的工作原理。

快速排序图示:可以图中在每次的比较选取的key元素为序列最后的元素。

#include#includetypedefintElementType;#defineCutoff(3)

voidswap(int*a,int*b){inttemp=*a;*a=*b;*b=temp;}voidWithSentrySort(ElementTypeA[],intN){inti,j;for(i=2;iA[0];j--){A[j+1]=A[j];}A[j+1]=A[0];}}

ElementTypeMedian3(ElementTypeA[],intLeft,intRight){intCenter=(Left+Right)/2;if(A[Left]>A[Center])swap(&A[Left],&A[Center]);if(A[Left]>A[Right])swap(&A[Left],&A[Right]);if(A[Center]>A[Right])swap(&A[Center],&A[Right]);

swap(&A[Center],&A[Right-1]);returnA[Right-1];}

voidQSort(ElementTypeA[],intLeft,intRight){inti,j;ElementTypePivot;if(Left+Cutoff<=Right){Pivot=Median3(A,Left,Right);i=Left;j=Right-1;for(;;){while(A[++i]Pivot);if(i

voidQuickSort(ElementTypeA[],intN){QSort(A,0,N-1);}

voidPrint(intA[],intn){inti;for(i=0;i

intmain(){constintMAX_ELEMENTS=10;intlist[MAX_ELEMENTS];inti=0;for(i=0;i

printf("排序之后:");Print(list,MAX_ELEMENTS);return0;}

运行结果:

0)引论

首先我们要明白什么叫做等价关系,而在这个之前要先有一个关系(relation)的定义

等价关系也是一种关系(Relation),只不过是要满足一些约束条件

a)aRa,对于所有属于S的a

b)aRb当且仅当bRa

c)aRb并且bRa意味着aRc

动态等价性问题:

定义在非空集合S上的关系R,对于任意属于数据集S中的每一对元素(a,b),确定aRb是否为真,也就是说a与b是否有关系。

而对于a与b是否有关系,我们只需要证明a与b是否在同一个等价类集合中。

1)基本结构

Find操作:返回给定元素的集合的名字,也就是检查a,b是否在同一个等价类中。对于Find运算,最重要的是判断Find(a,S)==Find(b,S)是否成立。

Union操作:如果a,b不在一个等价类中,可以用Union操作把这连个等价类合并为一个等价类。

我们可以用tree结构来表示一个集合,root可以表示集合的名字。由于仅有上面的两个操作而没有顺序信息,因此我们可以将所有的元素用1-N编号,编号可以用hashing方法。

a)使Find运行快

在数组中保存每个元素的等价类的名字,将所有等价类的元素放到一个链表中

b)使Union运行快

使用树来表示每一个集合,根节点表示集合的名字。数组元素P[i]表示元素i的父亲,若i为root,则P[i]=0。

对于Union操作,相当于把连个树合并,也就是指针的移动,如下图所示:

2)灵巧合并算法

上面的合并算法相当随意,它就是把第二棵树作为第一棵树的子树来完成合并操作。有一个简单的改进方法是总是让较小的树成为较大的树的子树,这种方法叫做Union-by-Size,如下图所示Union-by-Size可以降低树的深度,每个节点的深度都不会超过O(logN)。

为了实现这种方法,必须记录每一棵树的大小。我们可以另每一个根节点的数组元素表示树的大小的赋值,非根节点不变,依旧表示其父节点。这其实是把上面方法的数组中的0的位置做了一些利用。

另一种方法是Union-by-Height,也就是说我们把高度较浅的树作为高度较深的树的子树。亦即根节点记录的是树的高度的负值。

Union-by-Height的Union代码实现

路径压缩:在Find操作期间执行与Union操作无关,路径压缩的效果是从X到根节点的路径上的每一个结点都使它的父节点成为根节点。

代码实现:

路径压缩算法是与Union-by-Size相兼容的,与Union-by-Height并不完全兼容。

4)小应用

说了这么多,这个数据结构总要有点用处啊,否则就没有什么意义了。

一个例子是计算机网络和双向连接表,每一个连接将文件从一个计算机传递到另一个计算机。现在的问题是能否将文件从任意一个计算机传递到另一个任意的计算机,并且这个问题要on-line解决。

解决这个问题,就可以用到上面的数据结构。开始阶段我们可以把每一台计算机放到他自己的集合中,要求两台计算机传递文件当且仅当这两台计算机在同一个集合中。因此传输文件能力相当于一个等价关系。当我们需要传输文件时,检验两个计算机是否在同一个集合里,是的话就传输文件,否的话,就用Union方法把它们合并到一个集合中,然后传输文件。

THE END
1.历史上最著名的3个数学算法,关于算法的观念,直到今天还在演进对于“算法”一词给以精确的定义不是一件容易事,有一些意义相近的同义语,就是一些其他的名词,它们(有时)会给出差不多同样的东西,例如法则技巧”“程序”还有“方法”等等都是这种同义语。也可以给出一些例子,如长乘法,就是小学生学的把两个正整数相乘的竖式乘法。然而,虽然非形式的解释和恰当的例子对于https://baijiahao.baidu.com/s?id=1804985943646011952&wfr=spider&for=pc
2.算法集锦算法集锦 背包问题 描述 在n个物品中挑选若干物品装入背包,最多能装多满?假设背包的大小为m,每个物品的大小为A[i] 动态规划之背包问题系列 dp[i][j] 前i件物品在承重j内,最多能装多少重量 dp[i][j] = max(dp[i-1][j], dp[i-1][j-A[i]] + A[i])https://www.jianshu.com/p/044b15e242f1
3.十五个经典算法集锦探锦算法十五个经典算法集锦 浅雨夏梦 于2011-11-15 17:09:47 发布 阅读量2.4k 收藏 18 点赞数 1 文章标签: 算法 语言 c 版权 一、A*搜索算法 一(续)、A*,Dijkstra,BFS算法性能比较及A*算法的应用 二、Dijkstra 算法初探 二(续)、彻底理解Dijkstra算法 二(再续)、Dijkstra 算法+fibonacci堆的逐步c实现 二(三https://blog.csdn.net/xia2012sj/article/details/6973802
4.GitHubyidao620c/core算法集锦的python实现. Contribute to yidao620c/core-algorithm development by creating an account on GitHub.https://github.com/yidao620c/core-algorithm
5.有趣的算法题目集锦有趣的算法题目集锦 查看原文 农夫、狼、羊、菜过河问题 题目描述有一个农夫带一只羊、一筐菜和一只狼过河。如果没有农夫看管,则狼要吃羊,羊要吃菜。但是船很小,只够农夫带一样东西过河。问农夫该如何解此难题? 输入描述:题目没有任何输入。 输出描述:题目可能有种解决方法,求出步骤最少的解决方法, 按顺序https://www.pianshen.com/article/46239661/
6.图像/视频去噪算法资源集锦【导读】图像去噪是指减少数字图像中噪声的过程。随着深度学习的发展,也有许多深度学习方法被用于图像/视频去噪。本文整理了一些去噪算法与数据集。 Denoising Algorithms Filter NLM [Web]:https://sites.google.com/site/shreyamsha/publications/image-denoising-based-on-nlfmt https://www.zhuanzhi.ai/document/3d4176fe72e1b21e65884b63bcffbd78
7.各大厂算法嘲题集锦下面是自己的整理的各大厂的关于算法的场景题的问题集锦,都比较经典,在面试过常会遇到。 另外算法岗的童鞋也可参考我之前写的这篇算法岗经验贴:https://www.nowcoder.com/discuss/93743 百度IDL:无给定条件,预测蔬菜价格。 提几个特征做预测模型:肉的价格、土壤健康指标、天气情况、国民收入、货币汇率等等。。 https://www.nowcoder.com/discuss/111134
8.《人工智能算法实例集锦(Python语言)》(强彦)简介书评当当网图书频道在线销售正版《人工智能算法实例集锦(Python语言)》,作者:强彦,出版社:西安电子科技大学出版社。最新《人工智能算法实例集锦(Python语言)》简介、书评、试读、价格、图片等相关信息,尽在DangDang.com,网购《人工智能算法实例集锦(Python语言)》,http://product.dangdang.com/29391743.html?point=comment_point
9.论文集锦室内定位技术与算法——《电子技术应用》优秀论文集锦【AET论文集锦】卫星世家的最新成果 http://www.chinaaet.com/article/3000093679 【AET论文集锦】网络与信息安全 http://www.chinaaet.com/article/3000091568 【AET论文集锦】卡尔曼滤波的应用 http://www.chinaaet.com/article/3000091028 【AET论文集锦】5G通信关键技术、算法设计 http://www.chinaaet.com/article/3000093264
10.高级算法工程师的岗位职责(集锦15篇)高级算法工程师的岗位职责(集锦15篇) 在快速变化和不断变革的今天,岗位职责使用的频率越来越高,岗位职责包括岗位职务范围、实现岗位目标的责任、岗位环境、岗位任职资格及各个岗位之间的相互关系等。大家知道岗位职责的格式吗?以下是小编为大家收集的高级算法工程师的岗位职责,仅供参考,欢迎大家阅读。 https://www.qunzou.com/ziliao/gangwei/544580.html
11.案例集锦08互联网治理案例(下):算法治理个人隐私……在数字化浪潮的推动下,互联网治理已成为全球关注的焦点。从算法综合治理到个人隐私保护,从未成年人网络保护到网络直播乱象的整治,再到版权保护和数字治理的推进,这些议题不仅关系到网络空间的清朗,也牵动着社会的稳定与发展。 本案例集旨在深入探讨这些关键领域,分析当前的治理策略和实践,以及它们在维护公共利益https://weibo.com/ttarticle/p/show?id=2309405102174974902645
12.开发成长之路(8)算法小抄:思维跃迁此外,插入、希尔、堆排、选排、归并等一系列排序方法尽在:【C++】算法集锦(1):八大排序算法 :GIF + 亲测代码 +专项练习平台 递归算法 1、明确你要干嘛 2、明确递归的结束条件 3、寻找递推关系式 4、注意边界条件与调用方式 1. https://blog.51cto.com/u_15197573/5088995
13.仓库管理技术论文(集锦5篇)3网络拓扑发现算法的设计 为了实施对网络的管理,网管系统必须有一个直观的、友好的用户界面来帮助管理员。其中最基本的一个帮助就是把网络设备的拓扑关系以图形的方式展现在用户面前,即拓扑发现。目前广泛采用的拓扑发现算法是基于SNMP的拓扑发现算法。基于SNMP的拓扑算法在一定程度上是非常有效的,拓扑的速度也非常快。https://www.hrrsj.com/wendang/lunwen/756681.html
14.分布排序(distributionsorts)算法大串讲我爱西红柿本文介绍的排序算法是基于分配、收集的排序算法,分配排序的基本思想:排序过程无须比较关键字,而是通过"分配"和"收集"过程来实现排序.它们的时间复杂度可达到线性阶:O(n)。不受比较排序算法时间复杂度O(nlogn)的下限限制。 §1 鸽巢排序(Pigeonhole) https://www.iteye.com/blog/1709623
15.视频集锦基于视频理解算法,对足球、跳水体育赛事进行理解分析,提取视频赛事中的精彩镜头,通过边界监测,基于时序理解监测精彩的前向/后向边界点,最后通过语音与镜头切换进行时间边界的细分切割并进行视频重编码,生产集锦视频。https://www.aliyun.com/activity/intelligent/video_highlights
16.[蓝蓝计算机考研算法训练二期][蓝蓝计算机考研算法训练二期]-day10 15、奇偶数分离 有一个整型偶数n(2<= n <=10000),你要做的是:先把1到n中的所有奇数从小到大输出,再把所有的偶数从小到大输出。 输入 第一行有一个整数i(2<=i<30)表示有 i 组测试数据;每组有一个整型偶数n。https://juejin.cn/post/7208222652619325477
17.PHP实现的一致性Hash算法详解分布式算法php技巧本文实例讲述了PHP实现的一致性Hash算法。分享给大家供大家参考,具体如下:一致性哈希算法是分布式系统中常用的算法,为什么要用这个算法?比如:一个分布式存储系统,要将数据存储到具体的节点(服务器)上, 在服务器数量不发生改变的情况下,如果采用普通的hash再对服务器总数量取模的方法(如key%服务器总数量),如果期间https://www.jb51.net/article/137523.htm
18.回溯算法N叉树相关技巧腾讯云开发者社区我个人认为,想玩得转回溯算法,N叉树的遍历是必备的。于是我就来把这块石头搬开。 前言 二叉树是一棵以根节点开始,每个节点含有不超过 2 个子节点的树。让我们将这个定义扩展到 N 叉树 。 一棵以根节点开始,每个节点不超过 N 个子节点的树,称为 N叉树 。 各位自行脑补。 https://cloud.tencent.com/developer/article/1685274
19.july七月算法七月在线北理工校外导师,微软AI MVP,Github上2万余star,CSDN 2000万PV博客『结构之法 算法之道』博主,去过近百所985/211高校分享算法,亦是华为云等数十个大会的演讲嘉宾。2015年创办七月在线,并于2018年获得好未来千万投资,到2022年平台上聚集了350+的大厂专家讲师团队,和150+的全球TOP高校研究员的学术导师团队。2023年https://www.julyedu.com/
20.今日头条算法架构师:人工智能的下一步是机器人写作和短视频制作今日头条算法架构师表示,今年下半年以来,市场上将近一半以上的分发量都是由机器控制,“机器人正在接管人类权利,控制内容分发”。今日头条下一步要做的是,视频封面的自动选择以及自动生成集锦。 今日头条算法架构师 曹欢欢 在今年奥运会期间,用户在今日头条看到的很多新闻,都是一个叫 Xiaomingbot 的人工智能机器人完成的https://www.tmtpost.com/2540073.html
21.人工智能算法案例大全:基于Python人工智能算法Python案例实战 作者:吕鉴涛 ISBN:9787115543073 出版社:人民邮电出版社 出版年:2021 人工智能算法 :Python语言版 作者:胡矿 ISBN:9787302608301 出版社:清华大学出版社 出版年:2022 人工智能算法实例集锦 :Python语言 作者:强彦 ISBN:9787560662763 出版社:西安电子科技大学出版社 出版年:2022 人工智能https://www.las.ac.cn/front/book/detail?id=c1a529f347e900a8c4dec529f4a3d7e5
22.新闻集锦我们开发了一种三阶段半参数估计算法来估计需求,并支持近似最优的数据驱动定价决策。从非渐近角度来看,我们推导出有限样本遗憾界限,展示了我们的算法在实现近似最优收入方面的有效性,即使在需求模型可能误设的情况下也是如此。数值结果表明,我们算法的决策性能可与双重机器学习方法相媲美,同时也显著优于一种简单的两步https://www.nusricq.cn/news/xwjj/168.html