算法
文章平均质量分 71
nanaMasuda
这个作者很懒,什么都没留下…
展开
-
最长公共子序列&&最长公共子串---[动态规划]
第一节、问题描述 什么是最长公共子序列呢?好比一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则S 称为已知序列的最长公共子序列。 举个例子,如:有两条随机序列,如 1 3 4 5 5 ,and 2 4 5 5 7 6,则它们的最长公共子序列便是:4 5 5。 注意最长公共子串(Longest CommonSubstri原创 2016-06-03 20:58:27 · 782 阅读 · 0 评论 -
刷刷笔试题~~~[动态规划!!!!]
动态规划算法算法描述:动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。基本思想也是将待求解问题分解成若干个子问题,先求解子问题,并将子问题的结果保存下来,然后从这些子问题的解得到原问题的解。动态规划实质上是一种以空间换时间的技术,它在实现的过程中,不得不存储产生过程中的各种状态,所以它的空间复杂度要大原创 2016-09-23 14:52:18 · 3408 阅读 · 0 评论 -
堆&&堆排序!!
堆排序思想:堆是一棵完全二叉树,可以用数组来存储,假设某元素在数组中下标为i,如果它有左子树,那么左节点的下标是2*i+1;如果有右子树,右节点的下标是2*i+2如果有父节点,父节点的下标是(i-1)/2取整。堆分为最大堆和最小堆,最大堆的任意子树跟节点不小于任意子节点,最小堆的根节点不大于任意子节点堆排序就是利用堆来对数组排序,我们使用的是最大堆处理思想和冒泡、选择排原创 2016-09-27 12:15:53 · 933 阅读 · 0 评论 -
刷刷笔试题~~[递归]
[编程题]上楼梯有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶、3阶。请实现一个方法,计算小孩有多少种上楼的方式。为了防止溢出,请将结果Mod 1000000007给定一个正整数int n,请返回一个数,代表上楼的方式数。保证n小于等于100000。测试样例:1返回:1解题思路:这个是很经典的递归问题,这里主要考察递归和溢出的问题递归:原创 2016-09-23 16:29:47 · 674 阅读 · 0 评论 -
深度优先遍历!!DFS
DFS算法的特点是从根顶点出发, 1. 访问所到达的顶点v。 2. 前往v的未被访问的邻接点。 若v的所有邻接点均被访问过,则回溯到访问历史中v的上一个顶点v',对其进行第2步,即访问v'除v之外的其他邻接点;这种回溯可以一直到根顶点;若回溯到根顶点后仍有节点未被访问,且不与根顶点邻接,则更换根节点。[练习题]无向图G=(V E),其中V=转载 2016-08-27 08:20:32 · 1307 阅读 · 0 评论 -
缓存淘汰算法--LRU算法
1. LRU1.1. 原理LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。 1.2. 实现最常见的实现是使用一个链表保存缓存数据,详细算法实现如下:1. 新数据插入到链表头部;2. 每当缓存命中(即缓存数据被访问),则将数据移转载 2016-08-30 16:36:28 · 533 阅读 · 0 评论 -
归并排序!!--Java
归并排序!!建立在归并操作上的一种有效的排序算法,采用分治法考虑如何将两个有序数列合并只要比较两个数列的第一个数,谁小就先取谁取了之后对应数列就移动到下一个数继续比较如果有数列为空,那直接将另一个数列的数据一次取出即可基本思想:将数组分成两组A,B如果这两组内的数据都是有序的那就very easy了可以将A,B组各自再分成两组依此类推当分出来的小原创 2016-08-29 13:46:16 · 418 阅读 · 0 评论 -
A、B两个整数集合,设计一个算法求他们的交集,尽可能的高效
思路1:排序法 对集合A和集合B进行排序(升序,用快排,平均复杂度O(N*logN)),设置两个指针p和q,同时指向集合A和集合B的最小值,不相等的话移动*p和*q中较小值的指针,相等的话同时移动指针p和q,并且记下相等的数字,为交集的元素之一,依次操作,直到其中一个集合没有元素可比较为止。 优点:操作简单,容易实现。 缺点:使用的排序算法不当,会耗费大量的时间,比如转载 2016-08-28 18:25:50 · 3014 阅读 · 0 评论 -
用堆实现优先级队列--Java
堆实现优先级队列!!堆好有用的呢最大优先级队列包含四个操作: heapMaximum()返回队列中最大的元素; heapExtractMax()返回队列中最大的元素并从队列中删除此元素; heapIncreaseKey(int i, T key)增加队列中下标为i的元素的值为key; maxHeapInsert(T key)向队列中插入元素key。 接下来分别介绍如何实现这转载 2016-08-28 13:35:03 · 693 阅读 · 0 评论 -
堆!!!--Java实现
堆!!堆是一颗完全二叉树,所有父节点都满足大于等于其子节点的堆叫大根堆,所有父节点都满足小于等于其子节点的堆叫小根堆。堆虽然是一棵树,但是通常存放在一个数组中,父节点和孩子节点的父子关系通过数组下标来确定如下图的小根堆及存储它的数组:从图中,我们可以很容易总结出,通过一个节点在数组中的索引怎么计算出它的父节点及左右孩子节点的索引下面直接给出对应的Java代码:转载 2016-08-28 11:49:21 · 604 阅读 · 0 评论 -
全排列算法(无重复元素时) --Java
public class Permutation { public static void permulation(int[] list, int start, int length) { int i; if (start == length) {//交换到最后一个数之后,start+1会等于length,这时输出list for原创 2016-08-16 12:03:10 · 801 阅读 · 1 评论