
数据结构和算法
文章平均质量分 95
victorika
这个作者很懒,什么都没留下…
展开
-
C++ hashmap的使用建议
C++ hashmap使用建议原创 2022-10-18 00:12:17 · 3306 阅读 · 0 评论 -
skiplist的简单实现
#pragma once#include <cstdlib>#include <cstdio>#include <ctime>template<typename Key, class Comparator>class SkipList {public: explicit SkipList(Comparator cmp); ~Sk...原创 2019-10-15 20:44:22 · 211 阅读 · 0 评论 -
MIT HAKMEM算法
这是一个求二进制里有多少个1的算法,复杂度很平均,用的少量数学知识,这里贴个出处:https://blog.youkuaiyun.com/msquare/article/details/4536388这篇文章条理清晰,讲得非常不错,下面只贴最后结论代码供自己使用,详情请看上面链接,认真看一定能懂。int bitcount(unsigned int n) { unsigned int ...转载 2018-05-18 17:29:31 · 324 阅读 · 0 评论 -
缓存算法LRU和LFU
LRU cache:链表+hash表思路:维护一个链表,链表头为最近最少使用的,链表尾为最近使用最多的,每次如果命中(如果不知道命中建议先看下操作系统)那么把节点从链表删去,再放到链表末尾,如果没有命中,则把链表头删除,把新的放到末尾。至于查找是否命中,可以通过unordered_map来保存节点地址,这样就可以O(1)找到了。代码如下:#include <cstdio>#...原创 2018-05-17 23:24:58 · 685 阅读 · 0 评论 -
外部排序
外部排序指的是在一台机子上只有有限的内存但是你需要排序一个很大量的数据,例如你要排序2TB数据但是内存只有2GB,这时候你只能每次处理2GB数据然后把排序好的数据放到外存里,这就是外部排序的思想。基本流程是这样的。拿刚才的那个例子,你每次读入内存2GB的数据,然后对他们进行排序,再写到一个个的文件里,最后没一个个文件都是排好序的数据,然后进行多路归并就好了,多路归并的话,可以用堆进行优化。思路...原创 2018-05-17 18:08:00 · 941 阅读 · 0 评论 -
二叉树的持久化(序列化和反序列化)
一开始我以为是ACM的可持久化数据结构。。。后来了解一下发现不是这样,然后看多两眼。。。好像上课有讲这东西,居然忘了。。二叉树持久化是指用某种方式将一棵二叉树以字符串形式保存,之后再根据这个字符串还原出来。用途:保存信息,传递信息。普遍的方法是先序遍历,碰到空节点则加'#',普通节点则为val+',',实现感觉是很容易的,对于原ACMER的我来说。下面直接给代码:#include...原创 2018-05-15 19:51:32 · 1789 阅读 · 0 评论 -
数据结构难点总结
红黑树:红黑树的5个特性: 性质1. 节点是红色或黑色。性质2. 根是黑色。性质3. 所有叶子都是黑色(叶子是NULL节点)。性质4. 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)性质5. 从任一节点到其每个叶子的所有简单路径 都包含相同数目的黑色节点。插入的情况:若是根节点直接插入.若父亲是黑色那么直接插入....原创 2018-05-14 23:37:30 · 3382 阅读 · 0 评论 -
快排尾递归优化版
没加随机优化和三数取中等优化...只是发出来方便自己记忆#include <stdio.h>#include <time.h>int partition(int *a,int l,int r){ int temp=a[l]; while(l<r){ while(l<r&&a[r]>=temp) r--; a[l...原创 2018-05-14 22:46:57 · 516 阅读 · 0 评论 -
一致性hash概括
普通的hash是这样的,假设有3个节点,数据分别是1 2 3 4 5 6 7 8 9 10,那么用取模方法的话分布如下。0:3 6 91:1 4 7 102:2 5 8这种情况下如果增加一个节点的话则会变成。0:4 81:1 5 92:2 6 103:3 7移动的数据要很多,所以这里就要用上一致性hash。对节点做hash计算,对值也做hash运算,最后把节...原创 2018-05-15 17:43:56 · 375 阅读 · 0 评论