变治法

1预排序

优化:及时回溯

排序过程中的语义

应用:唯一元素,最多元素,

2.高斯消元

矩阵运算相关,先跳过

3.AVL树

每个节点维护一个平衡因子:左子树高度-右子树高度

AVL树失去平衡,旋转

旋转平衡因子+-2的节点

旋转保证满足定义

保持二叉树

恢复平衡

删除的效率低

灵感:旋转树,不破坏结构,保持平衡

因为avl树不是太有用就不记了,但可以总结下

左右是相对的,所有旋转情况可分为对称的两部分,只需考虑一半情况

父节点将子树划分为两个区间

简单旋转可能破坏二叉结构,则选择上提动作

旋转与上提都需考虑相关节点的其他子节点

原文地址:https://www.cnblogs.com/qmcj/p/9125959.html

时间: 2024-07-30 20:41:36

变治法的相关文章

算法笔记005:堆排序【变治法】

目录 1 问题描述 2 解决方案  2.1  堆排序原理简介 2.2  变治法原理简介 2.3  具体编码 2.4  运行结果截图 1 问题描述 (1)实验题目 用基于变治法的堆排序算法对任意一组给定的数据进行排序 (2)实验目的 1)深刻理解并掌握变治法的设计思想: 2)掌握堆的概念以及如何用变治法把任意给定的一组数据改变成堆: 3)提高应用变治法设计算法的技能. (3)实验要求 1)设计与实现堆排序算法: 2)待排序的数据可以手工输入(通常规模比较小,10个数据左右),用以检测程序的正确性:

变治法 二进制幂

从左至右二进制幂算法 # include <stdio.h> int leftRightBinaryExponentiation(int a, int b[4]); int rightLeftBinaryExponentiation(int a, int b[4]); //计算2的十三次方 1101 是13的二进制表达 void main() { int B[]={1, 1,0, 1 }; int C[]={1, 0,01, 1 }; int a=2; printf("%d\n&qu

AVL二叉排序树的java实现

这两天终于把AVL树好好理解了下,在<算法分析与设计基础>这本书中,被安排在变治法章节,是实例简化思想在查找树中的应用.它对平衡的要求是:每个节点的左右子树的高度差不超过1.从而我们只要在插入或删除节点时,保证这种平衡就可以了.如果平衡被打破,使用一系列旋转使树重新达到平衡. 总共有四种类型的旋转:左单转,右单转,左右双转,右左双转.只要讲到AVL树的算法书都会有旋转的解释.两个单转之间.两个双转之间相互对称.看似复杂的双转,其思想是先转换成单转,从而通过单转实现重新平衡.所以四种旋转的实现可

常用算法设计技术总结

算法,即计算的方法,使用计算的思想.方法.工具和技术来实现问题求解的思路和途径.计算机提供了计算的能力和硬件设施:算法则提供了计算的思想和软件技术,更好地发挥计算机的潜能. —— 引 有人说,算法无用,这种观点就如同盲人看不到花开就说世界上没有花一样,是一个长眼睛的人无论如何也难以接受的.举个简单的例子,假如你要对1000,000条记录进行排序,你的计算机每秒可处理1000,000 条记录, 那么, 如果你选择 O(nlogn)的快速排序,所花时间大约是 log2(1000000) = 20s,

谈谈算法的基本思想

David Berlinkshi说:有两种思想,象珠宝商放在天鹅绒上的宝石一样熠熠发光,一是微积分,另一个就是算法.如果说微积分及在其基础上建立的数学分析体系造就了现代科学,而算法则造就了现代世界. 算法是计算机科学的灵魂,更是每个程序员和软件工程师必需具有的核心知识.区分一个好的软件工程师和一个代码磨工(coder)的关键就在于看其是否能够分析并设计出高效率的算法.正如爱因斯坦所说的,并非所有能计算的东西都有价值.能计算的算法,也不一定是有价值的.除正确性外,算法的效率对一个程序而言至关重要.

记这半年多折腾过的几本书

ONE:<D is for digital> 记得以前关注的某位博主也在博文中提到这本书. 确实一本科很好的科普类书籍,涉及到的知识不少,包括简单的计算机组成原理,编程,算法(二分查找.选择排序.快排.快排.NP难题),操作系统,通信技术(无线网络.简单的移动网络(蜂窝网络)和手机通信原理等),计算机网络,网页前端技术以及网络安全等(“赶脚”作者是有将CS专业3年课程都撸个遍的野心啊). 嗯,真心不错的科普书哟!大赞之! TWO:<C Traps and Pitfalls> 当然作

给定二维平面整数点集输出“最大点集”算法(今日头条面试题)

引子 最近自己的独立游戏上线了,算是了却了一桩心愿.接下来还是想找一份工作继续干,创业的事有缘再说. 找工作之前,总是要浏览一些实战题目,热热身嘛.通过搜索引擎,搜到了今日头条的一道面试题. 题目 P为给定的二维平面整数点集.定义 P 中某点x,如果x满足 P 中任意点都不在 x 的右上方区域内(横纵坐标都大于x),则称其为"最大的".求出所有"最大的"点的集合.(所有点的横坐标和纵坐标都不重复, 坐标轴范围在[0, 1e9) 内) 如下图:实心点为满足条件的点的集

分治法(一)

这篇文章将讨论: 1) 分治策略的思想和理论 2) 几个分治策略的例子:合并排序,快速排序,折半查找,二叉遍历树及其相关特性. 说明:这几个例子在前面都写过了,这里又拿出来,从算法设计的策略的角度把它们放在一起来比较,看看分治是如何实现滴.由于内容太多,我将再花一篇文章来写4个之前没有写过的分治算法:1,大整数乘法   2,矩阵乘法的分治策略   3,最近点对  4,凸包问题,请见下一篇. 好了,切入正题. --------------------------------------------

分治法——算法总结二

分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同.求出子问题的解,就可得到原问题的解. 分治法解题的一般步骤: (1)分解,将要解决的问题划分成若干规模较小的同类问题: (2)求解,当子问题划分得足够小时,用较简单的方法解决: (3)合并,按原问题的要求,将子问题的解逐层合并构成原问题的解. 简而言之,分治法的设计思想就是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之. 问题分析:以归并排序为例子,将待排