
NOIP 分治与递归
文章平均质量分 91
_Tham
If you sleep now , you will hava a dream. But if you study now , you will achieve your dream.
展开
-
平面上最近点对
在二维平面上的n个点中,如何快速的找出最近的一对点,就是最近点对问题。 一种简单的想法是暴力枚举每两个点,记录最小距离,显然,时间复杂度为O(n^2)。 在这里介绍一种时间复杂度为O(nlognlogn)的算法。其实,这里用到了分治的 思想。将所给平面上n个点的集合S分成两个子集S1和S2,每个子集中约有n/2个点。然后在每个子集中递归地求最接近的点对。在这里,一个关键原创 2014-05-30 08:59:00 · 2766 阅读 · 0 评论 -
POJ 1905 Expanding Rods 木棍膨胀
描述当长度为L的一根细木棍的温度升高n度,它会膨胀到新的长度L'=(1+n*C)*L,其中C是热膨胀系数。当一根细木棍被嵌在两堵墙之间被加热,它将膨胀形成弓形的弧,而这个弓形的弦恰好是未加热前木棍的原始位置。你的任务是计算木棍中心的偏移距离。输入三个非负实数:木棍初始长度(单位:毫米),温度变化(单位:度),以及材料的热膨胀系数。保证木棍不会膨胀原创 2015-10-22 13:34:07 · 3836 阅读 · 1 评论 -
CQD(陈丹琦)分治 & 整体二分——专题小结
整体二分和CDQ分治有一些问题很多时间都坑在斜率和凸壳上了么……感觉斜率和凸壳各种搞不懂……整体二分 整体二分的资料好像不是很多,我在网上找到了一篇不错的资料:http://www.cnblogs.com/zig-zag/archive/2013/04/18/3027707.html整体二分是个很神的东西,它可以把许多复杂的数据结构题化简。它的精髓在于巧妙地利用了原创 2015-05-06 17:47:21 · 11297 阅读 · 0 评论 -
全排列(递归方法,模板实现)
#include using namespace std; template void Perm(T a[], int k, int m) { if(k==m) { for(int i=0; i<=m; i++) cout<<a[i]; cout<<endl; }原创 2015-04-10 15:44:39 · 875 阅读 · 0 评论 -
线性动态规划——解最长公共子序列问题
动态规划法经常会遇到复杂问题不能简单地分解成几个子问题,而会分解出一系列的子问题。简单地采用把大问题分解成子问题,并综合子问题的解导出大问题的解的方法,问题求解耗时会按问题规模呈幂级数增加(分治思想,递归方法。往往会由于数据大导致递归层次过多而超时或爆栈,即使采用记忆化等优化策略,仍然可能解决不了问题)。原创 2014-10-28 17:41:45 · 1231 阅读 · 0 评论 -
快速排序,“两头交换”法 ,实现
#include #include void ksort(int a[],int low,int high)//low high 为目标排序序列的起始位,结束位{ int mid,i,j,t; //mid 为设定的快速排序分堆的值,以序列中间元素的值为基准位置 if(low>=high) return ; mid=a[(low+high)/2];原创 2014-06-16 20:59:04 · 2383 阅读 · 1 评论 -
快速排序 “挖坑填空”实现
快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。 总的说来,要直接默写出快速排序还是有一定难度的,因为本人就自己的理解对快速排序作了下白话解释,希望对大家理解有帮助,达到快原创 2014-06-16 20:48:44 · 1610 阅读 · 0 评论 -
stdlib库中qsort函数的使用
qsort :功 能: 使用快速排序例程进行排序 用 法: void qsort(void *base, int nelem, int width, int (*fcmp)(const void *,const void *)); 各参数:1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针用于确定排序的顺序 排序方法有很多种原创 2014-06-16 20:43:14 · 1207 阅读 · 0 评论 -
程序员的数学:汉诺塔递归与非递归求解
如果对汉诺塔算法的理解有困难,建议查看《程序员的数学》:第6章 递归——自己定义自己这一章作者详细用图形介绍了汉诺塔递归算法,便于理解,茅塞顿开!现对该算法从递归和非递归两个方面做如下总结:1.递归算法分析如下,设A上有n个盘子。如果n=1,则将圆盘从A直接移动到C。如果n=2,则:(1)将A上的n-1(等于1)个圆盘移到B上;(2)再将A上的一个圆转载 2014-09-18 17:31:03 · 1182 阅读 · 0 评论 -
多柱汉诺塔问题探究
引言汉诺塔算法一直是算法设计科目的最具代表性的研究问题,本文关注于如何设计多柱汉诺塔最优算法的探究。最简单的汉诺塔是三个柱子(A、B、C),因此多柱汉诺塔的柱子个数M≥3。下面从三柱汉诺塔说起,慢慢深入我们要关心的问题。1. 三柱汉诺塔三柱汉诺塔是经典的汉诺塔问题,在算法设计中是递归算法的典型问题。其算法是这样的: 首先把A 柱上面的n- 1 个碟子通过C 柱移到B 柱上【T(n-1)转载 2014-09-18 17:24:43 · 2891 阅读 · 0 评论 -
汉诺塔问题的递归实现(扩展)
汉诺塔问题的递归实现汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。1.汉诺塔(基本)汉诺塔问题是典型的分治算法问转载 2014-09-18 16:23:16 · 769 阅读 · 0 评论 -
各种排序算法总结篇(快速/堆/希尔/归并)
1.快速排序交换排序有:冒泡(选择)排序和快速排序,冒泡和选择排序的时间复杂度太高,思想很简单暂时不讨论,快速排序基于一种分治的思想,逐步地使得序列有序。#include #include using namespace std;int arrs[] = { 23, 65, 12, 3, 8, 76, 345, 90, 21, 75, 34, 61 };int arrLen =原创 2016-04-06 22:15:02 · 3989 阅读 · 0 评论