
数据结构和算法
文章平均质量分 88
ranjiewen
坚持阅读,坚持练习,日积月累! 金风玉露一相逢,便胜却人间无数!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
两个字符串的最长连续公共子串
LCS(Longest Common Subsequence) 就是求两个字符串最长公共子串的问题。引入:LCS(Longest Common Subsequence) 就是求两个字符串最长公共子串的问题。比如: String str1 = new String("adbccadebbca"); String str2 = new String("edabccadece");str原创 2016-09-20 14:16:18 · 2049 阅读 · 0 评论 -
二分查找法的实现和应用汇总
二分查找法的实现和应用汇总 在学习算法的过程中,我们除了要了解某个算法的基本原理、实现方式,更重要的一个环节是利用big-O理论来分析算法的复杂度。在时间复杂度和空间复杂度之间,我们又会更注重时间复杂度。时间复杂度按优劣排差不多集中在:O(1), O(log n), O(n), O(n log n), O(n2), O(nk), O(2n)到目前位置,似乎我学到的算原创 2016-09-20 14:02:27 · 551 阅读 · 0 评论 -
二叉树的遍历--递归+非递归
二叉树的非递归遍历 二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有前序、中序以及后序三种遍历方法。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁。而对于树的遍历若采用非递归的方法,就要采用栈去模拟实现。在三种遍历中,前序和中序遍历的非递归算法都很容易实现,非递归后序遍历实现起来相对来说原创 2016-09-20 14:02:46 · 281 阅读 · 0 评论 -
各种排序和查找复杂度
排序方法 平均情况 最好情况 最坏情况 辅助空间 稳定性冒泡排序 O(n^2) O(n) O(n^2) O(1) 稳定选择排序 O(n^2) O(n^2)原创 2016-09-20 14:03:21 · 521 阅读 · 0 评论 -
数据库索引
强烈建议参阅链接:http://www.linezing.com/blog/?p=798#nav-1说白了,索引问题就是一个查找问题。。。数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用B树及其变种B+树。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实原创 2016-09-20 14:03:43 · 284 阅读 · 0 评论 -
理解KMP
KMP字符串模式匹配通俗点说就是一种在一个字符串中定位另一个串的高效算法。简单匹配算法的时间复杂度为O(m*n),KMP匹配算法,可以证明它的时间复杂度为O(m+n).。一.简单匹配算法先来看一个简单匹配算法的函数://简单的字符串匹配算法#include using namespace std;int Index_BF(char s[], char原创 2016-09-20 14:03:50 · 324 阅读 · 0 评论 -
从01背包问题理解动态规划---初体验
01背包问题具体例子:假设现有容量10kg的背包,另外有3个物品,分别为a1,a2,a3。物品a1重量为3kg,价值为4;物品a2重量为4kg,价值为5;物品a3重量为5kg,价值为6。将哪些物品放入背包可使得背包中的总价值最大? 这个问题有两种解法,动态规划和贪婪算法。本文仅涉及动态规划。 先不套用动态规划的具体定义,试着想,碰见这种题目,怎么解决? 首先想到的,一般是原创 2016-09-20 14:04:48 · 292 阅读 · 0 评论 -
查找算法总结
静态查找结构主要有两种:顺序查找、折半查找 一、顺序查找:这个就不用说了,一个一个的差吧,很差劲的算法了,时间复杂度是O(n) public int shunXuSearch( int[] b, int c) { for ( int i = 0; i if (b[i] == c) {原创 2016-09-20 14:05:00 · 4119 阅读 · 2 评论 -
C++二叉树的实现
C++实现二叉查找树啥是二叉查找树在数据结构中,有一个奇葩的东西,说它奇葩,那是因为它重要,这就是树。而在树中,二叉树又是当中的贵族。二叉树的一个重要应用是它们在查找中的应用,于是就有了二叉查找树。 使二叉树成为一颗二叉查找树,需要满足以下两点:对于树中的每个节点X,它的左子树中所有项的值都要小于X中的项;对于树中的每个节点Y,它的右子树中所有项的值都要大于Y中的项。原创 2016-09-20 14:05:14 · 615 阅读 · 0 评论 -
矩阵快速幂
经常提到矩阵快速幂,今天研究了一下,就是将问题转化为二进制离散化,巧妙地减少运算量。 矩阵的快速幂是用来高效地计算矩阵的高次方的。将朴素的o(n)的时间复杂度,降到log(n)。 一般一个矩阵的n次方,我们会通过连乘n-1次来得到它的n次幂。但做下简单的改进就能减少连乘的次数,方法如下:把n个矩阵进行两两分组,比如:A*A*A*A*A*A => (A*A)*(A*A原创 2016-09-20 14:05:34 · 335 阅读 · 0 评论 -
N皇后问题--回溯法
1.引子 中国有一句古话,叫做“不撞南墙不回头",生动的说明了一个人的固执,有点贬义,但是在软件编程中,这种思路确是一种解决问题最简单的算法,它通过一种类似于蛮干的思路,一步一步地往前走,每走一步都更靠近目标结果一些,直到遇到障碍物,我们才考虑往回走。然后再继续尝试向前。通过这样的波浪式前进方法,最终达到目的地。当然整个过程需要很多往返,这样的前进方式,效率比较低下。2.适用范围原创 2016-09-20 14:05:59 · 379 阅读 · 0 评论 -
Trie树也称字典树
Trie树 Trie树也称字典树,因为其效率很高,所以在在字符串查找、前缀匹配等中应用很广泛,其高效率是以空间为代价的。一.Trie树的原理 利用串构建一个字典树,这个字典树保存了串的公共前缀信息,因此可以降低查询操作的复杂度。 下面以英文单词构建的字典树为例,这棵Trie树中每个结点包括26个孩子结点,因为总共有26个英文字母(假设单词都是小写字母组成)。原创 2016-09-20 14:06:14 · 234 阅读 · 0 评论 -
链表的增删改查的操作
看来几篇博客,自己还没有实践#include #include malloc.h>#define LEN sizeof(struct student)/*----------------数据定义----------------------*/ //定义一个学生信息的结构体,包括学号,姓名和结构体类型的指针 struct student{ long原创 2016-09-20 14:06:19 · 560 阅读 · 0 评论 -
计算机程序的思维逻辑- 函数调用的基本原理
从内存的角度看栈和堆! 我们介绍了函数的基本概念,在最后我们提到了一个系统异常java.lang.StackOverflowError,栈溢出错误,要理解这个错误,我们需要理解函数调用的实现机制。本节就从概念模型的角度谈谈它的基本原理。我们之前谈过程序执行的基本原理:CPU有一个指令指示器,指向下一条要执行的指令,要么顺序执行,要么进行跳转(条件跳转或无条件跳转)。基本上,这依然原创 2016-09-20 14:07:07 · 1349 阅读 · 0 评论 -
检查图中的有向路径
对于图的操作,貌似这是第一次遇到,剑指offer里面貌似没有,对图的数据结构和表示有了一定的了解。 1 /***************************************************** 2 * \file Path.cpp 3 * \date 2016/05/30 15:03 4 5 * \问题描述: 6 对于一个有向图,请实现一个算法,找原创 2016-09-20 14:07:43 · 457 阅读 · 0 评论 -
最长公共子序列(LCS)
最长公共子序列,英文缩写为LCS(Longest Common Subsequence)。其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共子序列。而最长公共子串(要求连续)和最长公共子序列是不同的. 最长公共子序列是一个十分实用的问题,它可以描述两段文字之间的"相似度",即它们的雷同程度,从而能够用来辨别抄原创 2016-09-20 14:08:16 · 571 阅读 · 0 评论 -
Treap树
Treap树算是一种简单的优化策略,这名字大家也能猜到,树和堆的合体,其实原理比较简单,在树中维护一个"优先级“,”优先级“采用随机数的方法,但是”优先级“必须满足根堆的性质,当然是“大根堆”或者“小根堆”都无所谓,比如下面的一棵树:从树中我们可以看到:①:节点中的key满足“二叉查找树”。②:节点中的“优先级”满足小根堆。 一棵treap是一棵修改了结点顺序原创 2016-09-20 14:09:12 · 361 阅读 · 0 评论 -
八大排序算法
概述 参考:http://blog.youkuaiyun.com/hguisu/article/details/7776068 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速原创 2016-09-20 14:13:14 · 771 阅读 · 0 评论 -
快速排序的理解
//快速排序实现方法一void quick_sort(int s[],int l,int r)//先去第一个元素作为基准,从后面比较{ int i = l, j = r, base = s[i];//挖坑 while (ibase) { j--; } if (ij) { s[i++] = s[j];原创 2016-09-20 14:02:07 · 432 阅读 · 0 评论