![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 83
push_pop
这个作者很懒,什么都没留下…
展开
-
从二叉排序树到平衡二叉树再到红黑树系列1
最近想写一些关于红黑树的博客,既想写的全面,又直观,但是又不知道从哪里入手。斟酌再三,还是从最简单的二叉排序树开始写。二叉排序树(Binary Sort Tree)又叫二叉查找树。它是一种特殊结构的二叉树。其或为空树,或具备下列性质:(1)若它的左子树不为空,则左子树上所有结点的值均小于它的根节点的值。(2)若它的右子树不为空,则左子树上所有结点的值均大于它的根节点的值。显然,它的原创 2015-05-13 20:11:43 · 852 阅读 · 0 评论 -
最小生成树之Kruskal算法和Prim算法
根据图的深度优先遍历和广度优先遍历,可以用最少的边连接所有的顶点,而且不会形成回路。这种连接所有顶点并且路径唯一的树型结构称为生成树或扩展树。实际中,希望产生的生成树的所有边的权值和最小,称之为最小生成树。常见的最小生成树算法有Kruskal算法和Prim算法。Kruskal算法每次选取权值最小的边。然后检查是否加入后形成回路,如果形成回路则需要放弃。最终构成最小生成树。n个顶点的图最小生原创 2015-06-04 16:17:46 · 1410 阅读 · 0 评论 -
动态规划
动态规划(DP)是一种解决复杂问题特别是主问题包含重复子问题的常用算法思想。它将待求解问题分解成若干子问题,先求解子问题,然后再从子问题中得到原问题的解。不同于分治法,子问题常常不是互相独立的。利用动态规划求解问题的有效性 依赖于问题本身具有的两个重要性质,也就是如果待解决问题具有以下两个性质,就可以考虑使用动态规划求解。1 最优子结构:问题的最优解包含了其子问题的最优解。2 重叠子问原创 2015-06-29 21:25:53 · 787 阅读 · 0 评论 -
归并排序和桶排序
归并排序就是将两个或多个有序表合并成一个有序表的过程。若将两个有序表合并成一个表则称为二路归并。二路归并过程如下:首先把待排的每一个元素看成一个有序表。n个元素构成n个有序表。接着两两合并,即第一个表和第二个表合并;第三个表和第四个表合并;.....。依次类推,若最后还剩一个表没有合并(即n为奇数),则直接进入下一次两路归并。此为一趟归并。然后再两两合并,直到最后合并为一个表结束。例如原创 2015-05-08 11:17:33 · 3209 阅读 · 0 评论 -
简单选择排序与堆排序
选择排序的基本运算都是在n个元素组成的序列中,选择一个关键字最大或最小的元素输出,然后再从剩余的n-1个元素中选择一个关键字最大或最小的元素输出,以此类推,直到排序结束。以递增排序为例,简单选择排序过程如下:1第一次在数组中查找最小值a[i],然后将a[i]和a[0]交换位置。 2从a[1]开始,同样从a[1]开始往后找到最小值a[j],然后与a[1]交换位置,依次类推。废话不多说,直接贴代码原创 2015-05-07 12:51:08 · 652 阅读 · 0 评论 -
从二叉排序树到平衡二叉树再到红黑树系列3
这篇博客主要讲解B树及其插入删除操作,并给出操作的流程图以达到清晰易懂的目的,尽管标题是从二叉排序树到平衡二叉树再到红黑树系列3,没有B树二字,但他们都是动态查找树,所以我将他们归为一个系列。B树是为磁盘或其他直接存取的辅助存储设备而设计的一种平衡搜索树。它以一种很自然的方式推广了二叉搜索树,B树与红黑树的不同之处在于B树结点的孩子不限于最多为2,而是可以有数个到数千个不定。因为结点的分支更多原创 2015-05-29 19:26:54 · 1116 阅读 · 0 评论 -
串模式匹配之BF和KMP,Sunday算法
本文简要谈一下串的模式匹配。主要阐述BF算法和KMP算法。力求讲的清楚又简洁。一 BF算法核心思想是:对于主串s和模式串t,长度令为len1,len2, 依次遍历主串s,即第一次从位置0开始len2个字符是否与t对应的字符相等,如果完全相等,匹配成功;否则,从下个位置1开始,再次比较从1开始len2个字符是否与t对应的字符相等。。。。BF算法思路清晰简单,但是每次匹配不成功时都要回原创 2015-05-26 21:39:07 · 1763 阅读 · 0 评论 -
数据库事务隔离级别
本文系转载,原文地址:http://singo107.iteye.com/blog/1175084数据库事务的隔离级别有4个,由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。√: 可能出现 ×: 不会出现转载 2015-07-31 20:15:36 · 686 阅读 · 0 评论 -
Leetcode--easy系列4
#58 Length of Last WordGiven a string s consists of upper/lower-case alphabets and empty space characters ' ', return the length of last word in the string.If the last word does not exist,原创 2015-06-24 15:54:43 · 752 阅读 · 0 评论 -
Leetcode--easy系列1
#6 ZigZag ConversionThe string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)原创 2015-06-22 20:50:21 · 1244 阅读 · 0 评论 -
从二叉排序树到平衡二叉树再到红黑树系列2
上篇博客主要讲述了二叉排序树的基本概念和插入删除操作,必须再次说明的是:在一棵高度为h的二叉排序树上,实现动态集合操作查询,插入和删除的运行时间均为O(h)。可见二叉树的基本操作效率取决于树的形态,当然树的高度越低越好,显然树分布越均匀,高度越低。那么,问题来了?对于给定的关键字序列,如何构造一棵形态匀称的二叉排序树。这种匀称的二叉排序树就称为平衡二叉树。平衡二叉树定义:平衡二叉树原创 2015-05-15 11:24:31 · 1076 阅读 · 0 评论 -
冒泡排序和快速排序
冒泡排序和快速排序都属于交换排序,其基本思想是两两比较待排序对象,如果次序与预期次序相反的话,则交换彼此的位置,直到所有哦对象排好序为止。冒泡排序:过程很简单,以递增为例,从数组第一个元素开始,与下一个元素值两两比较,若后一个元素值大于前一个元素值,则交换位置,直到最后两个元素相比较。从而把最 大的移动到最后一个位置;再从第一个元素开始寻找前n-1个元素中的最大值,置于数组n-2位置原创 2015-05-06 15:07:20 · 792 阅读 · 0 评论 -
Leetcode--easy系列10
#205 Isomorphic StringsGiven two strings s and t, determine if they are isomorphic.Two strings are isomorphic if the characters in s can be replaced to get t.All occurrences of a charact原创 2015-06-25 21:46:03 · 670 阅读 · 0 评论 -
Leetcode--easy系列8
#172 Factorial Trailing Zeroes Given an integer n, return the number of trailing zeroes in n!.Note: Your solution should be in logarithmic time complexity.一个很直观的想法是用递归求出n!然后/10 计算末原创 2015-06-25 16:24:52 · 565 阅读 · 0 评论 -
直接插入排序和希尔排序
直接插入排序基本思想:顺序地把待排序的数据元素按关键值的大小插入到已排序数据元素的子集合的适当位置。从第二个元素开始,不断地将新添加的元素插入到原来已排序的子集合中去,直到所有元素有序。以升序为例://***********1直接插入排序*************************void InsertSort(int a[],int len){ int i,j,key;原创 2015-05-06 10:53:56 · 486 阅读 · 0 评论 -
Leetcode 2 Add two Numbers
You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a link原创 2015-05-27 20:35:55 · 1257 阅读 · 0 评论 -
Leetcode 1 Two Sum
Two Sum:Given an array of integers, find two numbers such that they add up to a specific target number.The function twoSum should return indices of the two numbers such that they add up to the原创 2015-05-27 13:21:08 · 607 阅读 · 0 评论 -
Leetcode 3 Longest Substring Without Repeating Characters
Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. Fo原创 2015-05-28 19:04:38 · 636 阅读 · 0 评论 -
Leetcode--easy系列2
#14 Longest Common PrefixWrite a function to find the longest common prefix string amongst an array of strings.这个题求多个字符串的公共前缀,除了要考虑串空外,如果存在公共前缀,那么必定也是第一个串的前缀。所以可以以第一个串为基准,比较其他串的前缀是否与第一个串相同。c原创 2015-06-23 11:18:03 · 748 阅读 · 0 评论 -
Leetcode--easy系列3
#26 Remove Duplicates from Sorted ArrayGiven a sorted array, remove the duplicates in place such that each element appear only once and return the new length.Do not allocate extra space for原创 2015-06-24 10:59:09 · 650 阅读 · 0 评论 -
图的遍历
图是一种比线性表和树稍微复杂的数据结构,相比线性表的前驱后继和树的层次关系,图中任意两个元素之间都有可能存在关系。图由非空的顶点集合和一个描述顶点之间关系的集合组成,记为 G = (V, E)。可分为 无向图 和 有向图。n个顶点的无向图中,如果任意两个顶点之间有且只有一条边,总的边数为 n(n-1)/2,这样的图称为完全图;n个顶点的有向图中,如果任意两个顶点之间有且只有一条边,总的边数为原创 2015-06-04 11:18:22 · 1806 阅读 · 0 评论 -
AVL树图文解析和C语言实现
概要本章介绍AVL树。和前面介绍"二叉查找树"的流程一样,本章先对AVL树的理论知识进行简单介绍,然后给出C语言的实现。本篇实现的二叉查找树是C语言版的,后面章节再分别给出C++和Java版本的实现。建议:若您对"二叉查找树"不熟悉,建议先学完"二叉查找树"再来学习AVL树。目录1. AVL树的介绍2. AVL树的C实现3. AVL树的C实现(完整源码)4.转载 2015-05-19 19:26:24 · 680 阅读 · 0 评论 -
Leetcode--easy系列9
#198 House RobberYou are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them原创 2015-06-25 20:17:48 · 763 阅读 · 0 评论 -
Leetcode--easy系列5
#83 Remove Duplicates from Sorted ListGiven a sorted linked list, delete all duplicates such that each element appear only once.For example,Given 1->1->2, return 1->2.Given 1->1->2->3->3原创 2015-06-24 16:57:40 · 566 阅读 · 0 评论 -
Leetcode--easy系列6
#104 Maximum Depth of Binary TreeGiven a binary tree, find its maximum depth.The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node原创 2015-06-24 21:03:10 · 642 阅读 · 0 评论 -
Leetcode--easy系列7
#125 Valid PalindromeGiven a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.For example,"A man, a plan, a canal: Panama" is a palindro原创 2015-06-24 22:06:43 · 466 阅读 · 0 评论