数据结构
文章平均质量分 74
T_tangc
这个作者很懒,什么都没留下…
展开
-
给定入栈顺序,判断出栈顺序是否合法
#includeusing namespace std;#include#includetemplatebool testLegal(int *stack_in, int *stack_out,size_t n){ assert(stack_in&&stack_out); stack s; int j = 0;//出栈数组下标 for (size_t i = 0;转载 2017-09-24 21:51:06 · 2511 阅读 · 0 评论 -
巧解快速排序时间复杂度
快速排序时间复杂度递归算法的时间复杂度=递归次数*每次递归遍历的次数我们来看一下快速排序算法的时间复杂度需要怎么来算呢? 代码实现://左右指针法 不断缩放 //思路 begin 找大的 end 找小的 //还要注意 如果是选end为key 则begin先走 否则end先走 //当选择end时候 因为当最后一次 end和begin差一个距离时候 如果先走end那会导致 /原创 2018-04-24 18:35:35 · 16130 阅读 · 2 评论 -
二叉搜索树
一、定义二叉搜索树(Binary Search Tree,BST)的性质: 1.所有节点关键码互不相同 2.左边的小,右边的大 3.左右也是一个二叉搜索树二、实现 结点结构template<class K>struct BinarySearchTreeNode{ BinarySearchTreeNode<K>* _left; BinarySearchTreeNode<原创 2018-04-04 16:31:45 · 97 阅读 · 0 评论 -
海量数据处理
海量数据处理 预备知识在解决大数据问题前,我们先准备一些基础知识:1G=1073741824Byte 大约等于10亿字节大数据问题思路: 1.特殊的数据结构能否解决 2.切分–>哈希切分(相同进一个) 切分次数最好大,这样平均每份小 常见问题1)给一个超过100G大小的log file,log中存着IP地址,设计算法找到出现次数最到的ip地址 算法思想:分而治之+Hash 先哈希原创 2018-04-02 20:55:34 · 128 阅读 · 0 评论 -
BitMap和BloomFilter
Mybitmap#include<iostream>#include<vector>using namespace std;class BitMap{public: BitMap(size_t range) { _bits.resize((range >> 3)+1,0);//(size,val) ...原创 2018-04-02 19:22:33 · 312 阅读 · 0 评论 -
n皇后问题
问题描述在n×n的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之处于同一行或同一列或同一斜线上的旗子。于是n后问题等价于在棋盘上放置n个皇后,任何2个皇后不在同一行或同一列或同一斜线上。n皇后问题有解的前提是仅当 皇后个数 = 1 或 n ≥ 4 。算法设计我们用n元数组x[1:n]表示n后问题的解,x[i]表示皇后i放置在第i行的第x[i]列,由于不允许将原创 2018-01-29 22:38:17 · 439 阅读 · 0 评论 -
Hash算法思想和应用
Hash算法是十分强大的查找算法。在这里我总结了《大话数据结构》 && 《数据结构与算法》&& 网上的资源写出了多角度的Hash算法。哈希查找平均时间O(1).那么,什么是哈希查找呢?在弄清楚什么是哈希查找之前,我们要弄清楚哈希技术,哈希技术是在记录的存储位置和记录的关键字之间建立一个确定的对应关系函数 f,使得每个关键字key对应一个存储位置f(key)。查找时,根据这个确定的对原创 2018-01-20 15:17:34 · 802 阅读 · 0 评论 -
常用排序算法小结
按照上图顺序依次展开插入排序直接插入排序//插入排序//思想: 每次取 a[end+1] 向【0,end】插入 //一定要细心 end 到0 都要比 最后出来的 //最坏情况 O(N^2) 1+2+3+4+...+n 每次都要调整(给的是个逆序) //最好情况 O(N) 本来就是有序的//平均情况 O(N^2)void InsertSort()原创 2018-01-28 14:17:58 · 236 阅读 · 0 评论 -
小白也可以理解的一致性哈希算法
基本场景比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object 映射到 N 个 cache 上呢,你很可能会采用类似下面的通用方法计算 object 的 hash 值,然后均匀的映射到到 N 个 cache ;求余算法: hash(object)%N一切都运行正常,再考虑如下的两种情况;1 一个 cache 服务器 m down 掉了(在实际应用中必须要考...转载 2018-01-19 16:43:12 · 179 阅读 · 0 评论 -
堆及相关问题
堆的定义堆(英语:heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质: 堆中某个节点的值总是不大于或不小于其父节点的值; 堆总是一棵完全二叉树。 将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。堆的本质vector+向下调整算法/向上调整算法注意:这棵树是完全二叉树 向下调整...原创 2017-10-08 18:57:32 · 602 阅读 · 0 评论 -
时间复杂度和空间复杂度的分析
时间复杂度本质就是在计算基本操作重复执行的次数 ,并且大多数情况下分析的是最坏情况的,通常用O()来表示计算的时候两个准则:1.忽略掉那些常数2.关注函数式中增长最快的表达式常用的时间复杂度有以下几种,算法时间复杂度依次增加:O(1)常数型、O(log2 n)对数型、O(n)线性、O(nlog2 n)二维型、O(n^2)平方型、O(n^3)立方型、O(2^n)指数型、通过下图我原创 2017-12-26 22:25:26 · 429 阅读 · 0 评论 -
二叉树的思维体操
二叉树的定义struct BinaryTreeNode{ BinaryTreeNode(const T& data) :_data(data) ,_left(NULL) ,_right(NULL) ,_parent(NULL) {} T _data; BinaryTreeNode* _left; BinaryTreeNode* _right; //BinaryTr原创 2018-01-03 17:14:57 · 259 阅读 · 0 评论 -
带你深入理解STL之Set和Map
STL的set和map都是基于红黑树实现的,和stack和queue都是基于deque一样,它们仅仅是调用了RBTree提供的接口函数,然后进行外层封装即可。本篇博客理解起来比较轻松,set和map的源代码也不多,大家可以慢慢“品味”。另外,还会介绍multiset和multimap这两个容器,并给出它们的区别和应用等。还等什么呢?走吧,带你理解理解set和map吧!setset是转载 2017-11-20 15:25:51 · 492 阅读 · 0 评论 -
并查集(Union-Find)
在计算机科学中,并查集是一种树型的数据结构,用于处理一些不交集(Disjoint Sets)的合并及查询问题。有一个联合-查找算法(union-find algorithm)定义了两个用于此数据结构的操作:Find:确定元素属于哪一个子集。它可以被用来确定两个元素是否属于同一子集。Union:将两个子集合并成同一个集合问题:假如已知有n个人和m对好友关系(存于数字r)。如果两个人是直接或间接的好友...原创 2018-04-27 12:34:53 · 253 阅读 · 0 评论