数据结构与算法
0_蜡笔小熊_0
不想做大神不是技术宅的程序员
展开
-
c++二叉树构建及面试常见问题代码实现
二叉树的面试常见问题包括:二叉树中的节点个数二叉树的深度前序遍历,中序遍历,后序遍历,层序遍历将二叉查找树变为有序的双向链表二叉树第K层的节点个数二叉树中叶子节点的个数判断二叉树是不是平衡二叉树二叉树的镜像二叉树中两个节点的最低公共祖先节点二叉树中节点的最大距离判断二叉树是不是完全二叉树下面是完整二叉树及这些常见问题的代码实现:头文件BTree.h#ifndef B原创 2016-08-07 12:38:00 · 729 阅读 · 0 评论 -
排序总结:堆排序、快速排序、归并排序、基数排序
排序算法按照不同的方式可以进行不同的分类:分为内部排序和外部排序;稳定性排序和不稳定性排序。我们常用的简单排序方法(选择、交换、插入),尽管非常容易理解和实现,但是它们的效率不高,这点在数据量较大时尤为明显。本文将简绍一些更高效的排序模式(堆排序、快速排序、归并排序、基数排序)的算法和实现,主要用于本人近期学习的总结,各位不喜勿喷堆排序 算法总结:堆,是原创 2016-08-06 14:30:44 · 776 阅读 · 0 评论 -
算法分析及实例解析(三)——回溯法
回溯法(backtracking)回溯法,是一种系统地搜索问题的方法。8皇后问题分治法有哪些经典例子呢?那可就多了,比较常见的将在下面一一列出分析。子集与数问题分治法有哪些经典例子呢?那可就多了,比较常见的将在下面一一列出分析。0-1背包问题分治法有哪些经典例子呢?那可就多了,比较常见的将在下面一一列出分析。着色问题原创 2016-08-08 20:52:02 · 2384 阅读 · 0 评论 -
算法分析及实例解析(二)——贪心算法、动态规划
贪心算法(greedy algorithm)贪心算法,顾名思义。其算法描述为:在分步决策问题中,每一步选择当前最优。由于贪心算法仅考虑局部最优性,所以不能保证整体最优。因此,对于贪心算法,必须进一步证明该算法的每一步做出的选择都必然导致问题的一个整体最优解。一般来说适用于贪心算法的问题具有两个特性:最优度量标准和最优子结构。贪心算法每一步做出的选择可以依赖于以前做出的选择,但决原创 2016-08-08 20:25:01 · 830 阅读 · 1 评论 -
字符串匹配算法---Brute force、KMP、Sunday
字符串匹配---输入原字符串(String)和子串(又称模式),输出为子串在原字符串中的首次出现的位置。在这儿,我们介绍用于字符串匹配的Brute force、KMP和Sunday方法。1.Brute force该方法又称暴力搜索。匹配时间复杂度O(N*M)主要过程:从原字符串开始搜索,若出现不能匹配,则从下一个位置继续。int bf(const char *t原创 2016-08-31 18:29:49 · 545 阅读 · 0 评论 -
求字符串中的回文最大长度
目前,此问题最好的解法是Manacher算法,时间复杂度为O(n),本文还给出了另外两种便于理解的方法。1.Manacher算法//Manacher's ALGORITHM: O(n)时间求字符串的最长回文子串 #include #include using namespace std;int Manacher(const string &data, const int &num原创 2016-08-31 15:49:13 · 420 阅读 · 0 评论 -
算法分析及实例解析(一)——分治法
分治法(divide and conquer)对于一个规模为n的问题,若该问题可以容易地解决,则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立,且与原问题形式相同,递归地解决这些子问题,然后将各子问题的解合并,得到原问题的解。这种算法设计策略叫做分治策略。分治法在每层递归上由三个步骤组成:1)划分(divide):将原问题分解成若干规模较小、相互独立、与原原创 2016-08-08 20:04:01 · 1168 阅读 · 0 评论 -
判断一个数组中没有出现的最小正数
下面介绍一种判断一个数组中没有出现的最小正数的方法,要保证效率:时间复杂度O(n)空间复杂度O(1)方法思路:使用数组下标,通过交换,保证数组下标为i的元素值为i+1,即arr[i]=i+1,然后从前往后,不满足此条件的数即为所求。实现代码://判断一个数组中没有出现的最小正数//时间复杂度O(n),空间复杂度O(1)#include us原创 2016-08-30 14:23:08 · 1636 阅读 · 2 评论 -
用两个队列实现栈&用两个栈实现队列
栈和队列的相互实现一直是面试中常考的问题。下面是它们的相互实现代码,以方便大家学习交流。用两个队列实现栈/*两个队列实现栈*/#include #include using namespace std;templateclass my_stack{ private: queue q_one; queue q_two; public: int top原创 2016-08-30 13:12:57 · 304 阅读 · 0 评论 -
Huffman Tree、AVL、SplayTree、Skip List、2-3-4 Tree、rb-Tree、B-Tree特性辨析与总结
赫夫曼树(Huffman Tree):赫夫曼树,又称最优树,是一类带权路径最短的树,应用广泛。说到路径,就存在路径长度和带权路径长度的概念,路径长度表示树中一个节点到另一个节点之间的路径上的分支和,考虑带权的节点,节点的带权路径长度为从该节点到树根的路径长度与节点上权的乘积,树的带权路径长度为树中所有叶子节点的带权路径之和。带权路径长度最小的二叉树称为赫夫曼树。如何构造赫夫曼树呢?赫夫曼最原创 2016-08-07 18:56:42 · 1015 阅读 · 0 评论 -
二叉树及其延伸:BST、AVL、SplayTree、SkipList
在学习基本数据结构过程中,我们常碰到二叉树,二叉树是一棵每个节点至多只有两个孩子的数,学习其常见的操作和变换可以参见我的另一篇博文《c++二叉树构建及面试常见问题代码实现》,在这儿,二叉树中引用得比较广的二叉搜索树(BSF)、平衡二叉树(AVL)及其AVL的常用替代结构伸展树(Splay Tree)和跳表(Skip List)。二叉搜索树(BST)介绍:二叉排序树(Binary原创 2016-08-07 16:04:09 · 762 阅读 · 0 评论