本文转载自白话经典算法 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比...
分类:
编程语言 时间:
2015-03-29 14:56:43
阅读次数:
162
设A[1..n]是一个包含n个不同整数的数组。如果在iA[j],则(i,j)就称为A中的一个逆序对(inversion)。
给出一个算法,确定n个元素的任何排列中逆序对的书目。时间复杂度为o(nlgn)。
分治法求解思路:
分解:将数组A[1..n]分为两个子序列A[1..p]和A[p+1,n],二分法将其分解。。
解决:根据归并排序的思想,在合并过程中,计算逆序对。假如两...
分类:
其他好文 时间:
2015-03-27 22:19:52
阅读次数:
200
转:http://blog.csdn.net/lcj_cjfykx/article/details/41691787分治算法一、基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最...
分类:
编程语言 时间:
2015-03-22 01:40:13
阅读次数:
299
package com.trfizeng.fenzhifa;/** * * @author trfizeng * 思想:就是把复杂问题简单化,将一个大问题分割成许多小问题,再分别解出决对应的小问题的集合就是大问题的解 * */public class MaxAndMin { public sta.....
分类:
其他好文 时间:
2015-03-21 18:39:07
阅读次数:
120
海量日志数据,提取出某日访问百度次数最多的那个IP。首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以采用hash...
分类:
其他好文 时间:
2015-03-20 18:09:20
阅读次数:
95
题目链接:sicily 1136解题思路:
要求区间内的最大子数组,而且访问可能很频繁,时间复杂度需要达到o(n*logn),于是就很自然地想到了线段树。我们可以用线段树来保存区间的最大子数组,但是仔细想想又不对劲了,如果访问的区间跨越了两个小区间怎么破,所以,这并不只是一个简单的求区间连续和的问题,还要有点小技巧。
最大子数组怎么得到的,还记得《算法导论》里面讲过一种用分治法来求最大子数组的方...
分类:
编程语言 时间:
2015-03-19 22:10:55
阅读次数:
220
最近点问题:二维平面中有n(n很大)个点,求出距离最近的两个点 思路:因为n的值很大,所以暴力和dp都行不通了吧!分治法就挺好的。 将区间一半一半的分开,直到分成只有一个点或两个点的时候! 对于只有两个点的区间,最小值就是这两个点的距离,只有一个点的区间, 最小值就是无穷大。注意还要考虑合并的时候....
分类:
其他好文 时间:
2015-03-18 20:29:40
阅读次数:
158
作为分治法的典型应用,二分搜索是程序员的常用算法。但是这个算法,却往往容易写错。因此,特意备份了July的一份代码,以备查询之用。//二分查找V0.1实现版 //copyright@2011 July //随时欢迎读者找bug,email:zhoulei0907@yahoo.cn。 //首...
分类:
其他好文 时间:
2015-03-15 16:47:36
阅读次数:
98
Pow(x, n)问题: Implement pow(x,n).思路: 分治法我的代码:public class Solution { public double pow(double x, int n) { return n >= 0 ? helper(x,n) : 1/h...
分类:
其他好文 时间:
2015-03-14 16:54:46
阅读次数:
126
在算法导论中众多的排序算法之中,最最重要的,也是必须要提笔会写的两个算法就是快速排序算法和归并排序算法了。这两种算法都是典型的分治法策略,即将一个大问题分成一个个的小问题,再逐一解决。 快速排序流程: (1) 从数列中挑出一个基准值,一般选择中间位置的值。 (2) 将所有比基准值小的摆放在基准前面,...
分类:
编程语言 时间:
2015-03-14 16:50:07
阅读次数:
156