12-13-01ADA09(减治法-减常因子算法I)

合集下载

算法设计与分析 第5章 减治策略和变治策略

算法设计与分析 第5章 减治策略和变治策略

元素的求解过程与n个元素求解过程的联系,使问题的求解直接通
过表达式来求解,从而简化问题的求解难度。
一般采用自顶向下的分析方法,但求解时往往采用自底向上的
求解过程。这也是递归的方法。
(2)减去一个常量因子
在规模中减去一个常量因子,使求解的规模成倍的缩小,从而
提高问题求解的效率。
(3)减去的规模可变。 根据求解过程的变化来确定每次规模减少的程度。 具体实例:
减治策略及变治策略
减治策略
利用一个问题给定实例的解与该问题较小实例的解之间的关系, 使原问题求解过程简化的方法称之为减治策略。 可利用递归或者非递归的方法进行问题的求解。一般分为三类: (1)减去一个常量。 也就是在求解过程中将原来的求解规模减小一个固定的常数,
比如原来有n个元素,通过减治之后,编程n-1个元素,并且建立n个
实例
将原始序列先转化成另一种存储形式,然后再进行排序以简化
排序算法,比如:
1、堆以及堆排序
2、平衡二叉树
此外,复杂问题简化以降低求解难度: 1、多项式求解:霍纳法则
2、进制之间的转换问题。
此外,还有一些具体问题的求解方法均可采用变治策略。
1、直接插入排序
2、拓扑排序
3、全排列问题
4、子集问题
变治策略
变治策略也就是将原始问题变换成更容易求解的实例,然后对变化
后的实例进行求解。
主要ቤተ መጻሕፍቲ ባይዱ如下类型:
(1)变换为同样问题的更简单的实例,也就是实例化简。
(2)变换为同样问题实例的不同形式,也成为改变表现。
(3)变换为不同问题的实例,使问题更易求解,成为问题简化。

5-第五章 减治法

5-第五章 减治法

2.比较v和 A[x]
确定查找范围
5.6.3 二叉查找树的查找和插入
• 二叉查找树:左子树的值小于根顶点,右 子树大于根顶点。
小结
5.4 生成组台对象的算法
• 组合问题 1、计数 2、结构
组合问题
5.4.1 生成排列
用减一思想生成{1,2,…,n}所有排列。
Johnson-trotter算法
• 字典序---增序排队
5.4.2 生成子集
1、挤压序: 所 2、是否存在—种生成比特串的最小变化算法,使得每
一个比特串和它的直接前趋之间仅仅相差一 个比特 位。
n / 2 ,它要求找出这样一个元素,该元素比列表中的—半元素大,又比另—半元素
小。这个中间的值被称为中值,它在数理统计中是—个非常重要的量。
• 类似快速排序的分区做法
• 例
15 15
效率分析: 1)平均效率 2)最差效率
5.6.2 插值查找
插值查找用于有序数组,“插值”代替了折 半查找中的中间值 1.计算
• 最坏输入是一个严格递减的数组,这种输 入的比较次数是
• 最好的情况下(升序),在外部循环的每 次送代中,比较操作只执行一次
• 平均
5.2深度优先查找和广度忧先查找
• 什么叫图的遍历 从图的任意点出发沿着一些边访问图中的 所有顶点,且使每个顶点仅被访问一次,这就 叫图的遍历. • 我们来看一下图的遍历的两种方法: 1.深度优先搜索 2.广度优先搜索
第一种算法是深度优先查找的一个简单应用:执行一次DFS遍 历,并记住顶点变成死端(即退出遍历栈)的顺序。将该次序反过来 就得到了拓扑排序的一个解。
第二种算法基于减(减一)治技术的一个直 接实现:不断地做这样—件事,在余下的有向 图中求出一个源,它是一个没有输入边的顶点, 然后把它和所有从它出发的边都删除。

减治法

减治法
原问题 的规模是n
子问题 的规模是n/2 子问题的解
原问题的解
图5.1 减治法的典型情况(减半技术)
对于给定的整数a和非负整数n,计算an的值。
利用减治法,如果n=1,可以简单地返回a的值,如果n是偶数并且n>1,可 以把该问题的规模减半,即计算an/2的值,而且规模为n的解an和规模减半 的解an/2之间具有明显的对应关系:an=(an/2)2,如果n是奇数并且n>1,可 以先用偶指数的规则计算a(n-1),再把结果乘以a。所以,应用减治技术得到 如下计算方法:
排序问题中的减治法
堆排序
选择问题
堆排序

28 25 36 18 32 28 36 25 18 16 32 25 16 36 25 18 16 36 28 32
28
18 16
32
堆排序是利用堆(假设利用大根堆)的特性进 行排序的方法,其基本思想是:首先将待排序 的记录序列构造成一个堆,此时,选出了堆中 所有记录的最大者即堆顶记录,然后将它从堆 中移走(通常将堆顶记录和堆中最后一个记录 交换),并将剩余的记录再调整成堆,这样又 找出了次大的记录,以此类推,直到堆中只有 一个记录为止。
n 1 n 1
查找问题中的减治法
折半查找
二叉查找树
折半查找
在有序表{ 7, 14, 18, 21, 23, 29, 31, 35, 38, 42, 46, 49, 52 }中查找值为14的 记录的过程如图所示。
0 1
7
2
14
3
18
4
21
5
23
6
29
7
31
8
35
9
38
10
42

第 五 章 减治法

第 五 章 减治法
仅仅通过一次重量的比较,就可以判断伪币是否存在。
算 分 析 与 设 计
西南科技大学
金块问题
有一个老板有一袋金块。每个月将有两 名雇员会因其优异的表现分别被奖励一 个金块。按规矩,排名第一的雇员将得 到袋中最重的金块,排名最后的雇员将 得到袋中最轻的金块。如果每个月都有 新的金块周期性的加入袋中,则每个月 都必须找出最轻和最重的金块。假设有 一台比较重量的仪器,我们希望用最少 的比较次数找出最轻和最重的金块。
算 分 析 与 设 计
西南科技大学
直接插入排序实现方法
减一技术下,该方法遵循的思路是:假设对较 小数组 A[0..n-2]排序问题已经解决了,得到一 个大小为n-1的有序数组。然后将要排序的第n 个元素,插入到数组的适合位置上,得到大小 为n的有序数组 A[0..n-1]。伪代码如下: void InsertionSort(a[]) {for(i=1;i<n-1;i++) //从第二个记录起进行插入 for (j=i-1; j>=0;j--) if a[j+1]-(a[j]) < 0 Swap(a[j+1], a[j]); }
算 分 析 与 设 计
西南科技大学
俄式乘法☺ 俄式乘法☺
算法思想:两个A和B数相乘,把数A每 次除以2,直到为0为止,另一个数B则不 断加倍,若第数A未除尽时,则数B应加 上自己。 7×8的计算步骤: 7 8 3 16+ 8 1 32+ 16 + 8
算 分 析 与 设 计
西南科技大学
约瑟夫斯问题( 约瑟夫斯问题(一)
算 分 析 与 设 计
西南科技大学
减常数因子减治法
减常数因子减治法的一个 典型算法就是折半查找 (Bin_Search)。它搜索 一个排序好的数组,将查 找目标与数组的中间位置 的元素相比,比它大则递 归查找数组的左边,反之 亦然。这个每次迭代都将 问题减小为原来的1/2。 折半查找每次都消去一个 常数因子2,因此其时间 效率为O(logn)。

AA-chapter 5-01 减治法

AA-chapter 5-01 减治法

18
插入排序
• 常用的插入排序有:
– 直接插入排序 – 折半插入排序 – 链表插入排序 – 希尔排序
• 它们的区别只在于 它们的区别 如何在排好序的序列 如何在排好序的序列 中寻找插入的位置。
算法分析与设计 兰州大学信息学院
19
5.1 直接插入排序
ALGORITHM InsertionSort( A[0 A[0..n ..n-1] ) // 对给定序列进行直接插入排序 // 输入:大小为n的无序序列A // 输出:按非递减排列的序列A for i ← 1 to n-1 do //把A[i]插入到A[1 A[1..i ..i-1] temp ← A[i] j ← i -1 while j ≥ 0 and A[j] > temp do A[j+1 A[j+ 1] ← A[j] j ← j-1 A[j+1 A[j+ 1] ← temp
InsertionSort( A[0 InsertionSort( A[0..n ..n-1] ) // 对给定序列进行直接插入排序 // 输入:大小为n的无序序列A // 输出:按非递减排列的序列A for i ← 1 to n-1 do temp ← A[i A[i] j ← i-1 while j ≥ 0 and A[j] > temp do A[j+1 A[j+ 1] ← A[j] j ← j-1 A[j+1 A[j+ 1] ← temp
算法分析与设计 兰州大学信息学院
21
5.1 直接插入排序 实例 (蓝色代表已排好序)
89 | 45 68 90 29 34 17 45 89 | 68 90 29 34 17
InsertionSort( A[0 InsertionSort( A[0..n ..n-1] ) // 对给定序列进行直接插入排序 // 输入:大小为n的无序序列A // 输出:按非递减排列的序列A for i ← 1 to n-1 do temp ← A[i A[i] j ← i-1 while j ≥ 0 and A[j] > temp do A[j+1 A[j+ 1] ← A[j] j ← j-1 A[j+1 A[j+ 1] ← temp

C++减治法查找范围整数

C++减治法查找范围整数

while(x<k1-1||y>k2-1) { int temp; int f1,f2;//存储最小和最大数的下标 f1=x; f2=y; for(int i=x; i<=y; i++) { if(a[f1].data>a[i].data) f1=i; if(a[f2].data<a[i].data) f2=i; } if(x<k1-1) { temp=a[x].data; a[x].data=a[f1].data; a[f1].data=temp; a[x].flag=0; x++; } if(y>k2-1) { temp=a[y].data; a[y].data=a[f2].data; a[f2].data=temp; a[y].flag=0; y--; } } } void Show(Mat &a,int n,int k1,int k2)
四、实验结果:
该算法的时间复杂度取决于n的大小和输入的 K1、K2的情况,最好情况是K1、K2恰好在输入的 无序列表的两端,此时不做运算,直接输出,时间 复杂度为O(0)。最坏情况是K1=K2=n/2时,此时做 n/2次运算,时间复杂度为O(n/2)。
{ cout<<"第"<<k1<<"小到"<<k2<<"小之间的所有整数有:"; for(int i=0; i<n; i++) { if(a[i].flag) cout<<a[i].data<<" "; } cout<<endl; } void main() { int choice; cout<<" 1: 执行程序! 2: 退出程序!"<<endl; do { cout<<"请选择你的操作:"; cin>>choice; switch(choice) { case 1: { int n; int k1,k2; cout<<"请输入无序列表n的大小:"; cin>>n; cout<<"请输入无序列表中的所有整数:"; for(int i=0; i<n; i++) { a[i].flag=1; cin>>a[i].data; } cout<<"请输入k1,k2的值:"; cin>>k1>>k2;

算法设计与分析-第5章-减治法

算法设计与分析-第5章-减治法

0 T (n) T (n / 2) 1
n 1 n 1
所以,通常来说,应用减治法处理问题的效率是很高的, 一般是O(log2n)数量级。
5.2 查找问题中的减治法
5.2.1 折半查找 5.2.2 二叉查找树 5.2.3 选择问题
5.2.1
一、问题描述:
折半查找
应用折半查找方法在一个有序序列中查找值为k的记 录。若查找成功,返回记录k在序列中的位置,若查找失 败,返回失败信息。
low=1
பைடு நூலகம்
18>14
mid=3
mid=7 31>14 high=6
high=13
high=2
mid=1
7<14
low=2
mid=2
14=14
5.2.1 折半查找
三、算法设计
算法5.1——折半查找
1. low=1;high=n; //设置初始查找区间 2. 测试查找区间[low,high]是否存在,若不存在,则查找失败; 否则 3. 取中间点mid=(low+high)/2; 比较k与r[mid],有以下三种情况: 3.1 若k<r[mid],则high=mid-1;查找在左半区进行,转2; 3.2 若k>r[mid],则low=mid+1;查找在右半区进行,转2; 3.3 若k=r[mid],则查找成功,返回记录在表中位置mid;
{ int data; //结点的值,假设查找集合的元素为整型
BiNode *lchild, *rchild; //指向左、右子树的指针 };
算法5.2——二叉排序树的查找
BiNode * SearchBST(BiNode *root, int k) { if (root= =NULL) return NULL; else if (root->data==k) return root; else if (k<root->data) return SearchBST(root->lchild, k); else return SearchBST(root->rchild, k); }

多指标综合评价方法及权重系数的选择

多指标综合评价方法及权重系数的选择

多指标综合评价方法及权重系数的选择来源:中国论文下载中心 [ 09-02-01 10:17:00 ] 编辑:studa20作者:王晖,陈丽,陈垦,薛漫清,梁庆【摘要】由于计算机的发展及一些相关领域的不断深入研究,综合评价方法得到了不断的发展和改进。

而指标权重系数的确定方法作为综合评价中的重中之重,近几年来也取得了一些新的进展。

本文对多指标评价方法和权重系数的选择进行概括介绍。

【关键词】多指标综合评价;评价方法;权重系数;选择基金项目:广东药学院引进人才科研启动基金资助项目( 2005ZYX12)、广州市科技计划项目( 2007J1-C0281)、广东省科技计划项目(2007A060305006)综合评价是利用数学方法(包括数理统计方法)对一个复杂系统的多个指标信息进行加工和提炼,以求得其优劣等级的一种评价方法。

本文就近年来国内外有关多指标综合评价及权重系数选择的方法进行综述,以期为药理学多指标的研究提供一些方法学的资料。

1 多指标综合评价方法1.1 层次分析加权法(AHP法)[1]AHP法是将评价目标分为若干层次和若干指标,依照不同权重进行综合评价的方法。

根据分析系统中各因素之间的关系,确定层次结构,建立目标树图→ 建立两两比较的判断矩阵→ 确定相对权重→ 计算子目标权重→ 检验权重的一致性→ 计算各指标的组合权重→计算综合指数和排序。

该法通过建立目标树,可计算出合理的组合权重,最终得出综合指数,使评价直观可靠。

采用三标度(-1,0,1)矩阵的方法对常规的层次分析加权法进行改进,通过相应两两指标的比较,建立比较矩阵,计算最优传递矩阵,确定一致矩阵(即判断矩阵)。

该方法自然满足一致性要求,不需要进行一致性检验,与其它标度相比具有良好的判断传递性和标度值的合理性;其所需判断信息简单、直观,作出的判断精确,有利于决策者在两两比较判断中提高准确性[2]。

1.2 相对差距和法[3]设有m项被评价对象,有n个评价指标,则评价对象的指标数据库为Kj=(K1j,K2j,……,Knj),j=1,2,……,m。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
BinarySearchNR(A[0…n-1], K)
//Input: An array A sorted in ascending order and a search K //Output: An index of the array’s element that is equal to K or -1 if there is no such element
If the key is smaller than the middle element, the key must be in the first half If the key is larger than the middle element, the key must be in the second half
2012-2013-01 《Design and Analysis of Algorithm》 SCUN
2012-12-27 13
Average-Case Analysis (cont.)
• So we can represent binary search as a binary tree:
2012-2013-01 《Design and Analysis of Algorithm》
• Euclid’s algorithm • The kth smallest element find algorithm • Interpolation search
2012-2013-01 《Design and Analysis of Algorithm》 SCUN
2012-12-27 5
What’s the difference? (example)

2012-2013-01 《Design and Analysis of Algorithm》 SCUN
2012-12-27 8
Binary search example:Find the key value 14
0 1 2 3 4 5 6 7 8 9 10 11 12
3 14 27 31 39 42 55 70 74 81 85 93 98
4
3 Types of Decrease and Conquer

Decrease by a constant (usually by 1)
• Insertion sort • Graph traversal algorithms (DFS and BFS) • Algorithms for generating permutations, subsets
2012-2013-01 《Design and Analysis of Algorithm》
SCUN
2012-12-27
3
Decrease-and-Conquer (basic idea)
1.
2. 3.
Reduce problem instance to smaller instance of the same problem Solve smaller instance Extend solution of smaller instance to obtain solution to original instance
k
[ r1 … … … rmid-1 ] rmid [ rmid+1 … … … rn ] (mid=(1+n)/2) k < rmid

k > rmid
First check the middle list element If the key matches the middle element, we are done
Problem of size n
subproblem of size n/2
solution to the subproblem solution to the original problem
2012-2013-01 《Design and Analysis of Algorithm》
SCUN
2012-12-27
2012-2013-01 《Design and Analysis of Algorithm》 SCUN
2012-12-27 12


Average-Case Analysis

Successful Search • If the search is always successful, there are n places (number of possible keys) the key could be found • We will consider each of these to be equivalent and so will give each a probability of 1/n • There is one place we check on the first pass, two places we could check on the second pass, and four places we could check on the third pass, and so on.
Chapter 5
Decrease and Conquer (I)
Introduction to Decrease-and-Conquer Decrease-by-a-Constant-Factor Algorithms The Binary Search Fake-coin Problem Russian Peasant Multiplication Josephus Problem

Combinatorial problem
• • Fake-coin problem (S5.5) Josephus problem (S5.5)
Binary Search (basic idea)

Used with a sorted list (the list is in increasing order)
low=0
27>14
mid=6 55>14 high=5
high=12
mid=2 high=1 mid=0
3<14
low=1 mid=1
14=14
SCUN
2012-12-27 9
2012-2013-01 《Design and Analysis of Algorithm》
The Binary Search Algorithm
Goals of the Lecis lecture, you should
• Master the basic idea and all kinds of variations of decrease and conquer technique • Master the binary search algorithm and its best-case, worstcase and average-case analysis • Understand the fake coin problem and its solution • Be familiar with the Russian peasant multiplication method • Understand the josephus problem and its solution
2012-12-27 6
The Application of Decrease by a constant factor technique

Search problem • The binary search (S4.3, P135-139)

Numerical problem
• Russian peasant multiplication (S5.5)

2012-2013-01 《Design and Analysis of Algorithm》
SCUN
2012-12-27
11
Worst-Case Analysis

In the worst case, we will either find the element on the last pass, or not find the element at all In each pass, only need 1 comparison. Hence, if we knew how many passes it has done, worst case is trivial If n = 2k-1, then there must be k = log(n+1) passes So, informally, we get: Tworst(n) = O(logn) If n is an arbitrary positive integer n, since after one pass, the algorithm faces the same situation but for an array half the size, we get the following recurrence relation for Tworst(n): Tworst(n) = Tworst ( n/2 ) + 1 n>1 Tworst(1) = 1 So, formally: Tworst(n) = logn + 1 = log(n+1) = O(logn)
2012-2013-01 《Design and Analysis of Algorithm》
SCUN
2012-12-27
10
Best-case Analysis
The input instances in which the target matches the middle element will lead to the best case. This means only one comparison is done. So we get: Tbest (n) = Ω(1)
相关文档
最新文档