随笔分类 - 基础算法
摘要:1.问题描述:求一个正整数序列的最长单调自增子序列,子序列不要求是连续的。例如Input:55 2 4 3 1Output:22.算法复杂度是O(N*N)确定状态转移方程,设f[i]是以a[i]为结尾的最大值的子序列的长度,那么\[\max \{ f[i]\} \]的最大值就是要的结果。所以转移方程...
阅读全文
摘要:1.什么是动态规划动态规划,和分治法一样,是通过组合子问题的解而解决整个问题的。但不同的是,分治算法是指将问题划分成一些独立的子问题,递归求解各子问题,然后合并子问题的解而得到原问题的解。而动态规划适用于子问题不是独立的情况,也就是各子问题包含公共的子子问题。动态规划对每个子子问题只求解一次,将其结...
阅读全文
摘要:对于大量的输入数据,链表的线性访问时间太慢,一般使用树这种数据结构。接下来的博客都将围绕如何利用树支持以O(logN)平均时间进行的各种搜索操作,以及如何细化优化得到最坏情况时间界O(logN)。从逻辑结构上说,我之前写到的都是一对一的线性结构,也就是说一个节点一定有一个直接前驱一个直接后继。但是在...
阅读全文
摘要:索引查找是在索引表和主表(即线性表的索引存储结构)上进行的查找。索引查找的过程是:1)首先根据给定的索引值K1,在索引表上查找出索引值等于K1的索引项,以确定对应子表在主表中的开始位置和长度。2)然后再根据给定的关键字K2,在对应的子表中查找出关键字等于K2的元素(结点)。对索引表或子表进行查找时,...
阅读全文
摘要:查找概念查找表:由同一类型的数据元素构成的集合。查找表按照操作的方式分为两大种:静态查找表和动态查找表。静态查找表:只作查找操作的查找表,它的主要的操作有:查找某个“特定的数据元素”动态查找表:在查找过程中同时插入查找表中不存在的数据元素,或者从查找表中删除已经存在的某个数据元素。动态查找表的操作:...
阅读全文
摘要:前面介绍的几种查找的算法都是基于数据有序的基础上进行的。但是在实际的应用中,很多数据集可能有惊人的数据量,面对这些海量的数据,要保证记录全部按照当中的某个关键字有序,其时间代价是非常昂贵的,所以这种数据通常都是按先后顺序存储的。那么如何能够快速的查找到需要的数据呢?办法就是--索引。索引就是把一个关...
阅读全文
摘要:算法描述先来看一个实际问题:我们在一本英汉字典中寻找单词“worst”,我们决不会仿照对半查找(或Fibonacci查找)那样,先查找字典中间的元素,然后查找字典四分之三处的元素等等. 事实上,我们是在所期望的地址(在字典的很靠后的地方)附近开始查找的,我们称这样的查找为插值查找。可见,插值查找不同...
阅读全文
摘要:归并算法的基本实现:归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。它的时间复杂度是Θ(nlgn)。归并排序的步骤如下:1. Divide:把长度为n的输入序列分成两个长度为n/2的子序列。2. Conquer:对这两个...
阅读全文

浙公网安备 33010602011771号