算法训练
为2021春招找实习做准备
秀菜菜不菜
这个作者很懒,什么都没留下…
展开
-
12 对应题目和链接
六字符串Boyer-Moore算法sunday算法kmp视频KMP博文第六周作业动态规划排序算法十大排序算法九种经典排序算法可视化动画6分钟15种排序布隆过滤器布隆过滤器的原理和实现BloomFilter布隆过滤器解决缓存击穿、垃圾邮件识别、集合判重布隆过滤器的官方实现五位运算减枝双向BFS启发式搜索二进制中最短路径A*解法8 puzzle解法比较字典树 并查集作业四动态规划本周三分治回溯DFS bfs原创 2021-03-17 12:22:44 · 44 阅读 · 0 评论 -
11 字符串
字符串匹配问题1.暴力法2.Rabin-Karp算法3.KMP算法模板:Rabin-Karp算法的思想:1.假设子串的长度为M,目标为N2.计算子串的hash值hash_pat3.计算目标子串中每个长度为M的子串的hash值(N-M+1次)4.比较hash值,值不同,必不匹配。相同,朴素算法。KMP当子串与目标字符串不匹配时,设法利用已知信息,不要把“搜索位置”移回已经比较过的位置,继续把它向后移,提高效率。...原创 2021-03-17 10:39:18 · 210 阅读 · 0 评论 -
10 排序算法
比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。主要考nlogn的初级排序 - O(n^2)选择排序(Selection Sort)每次找最小值,然后放到待排序数组的起始位置。插入排序(Insertion Sort)从前到后逐步构建有序序列;对于未排序数据,在已排序序列中从后向.原创 2021-03-17 10:23:09 · 240 阅读 · 0 评论 -
9 位运算 布隆过滤器 LRU
c=a^b交换两位数N皇后问题的位运算解法原创 2021-03-17 09:45:03 · 86 阅读 · 0 评论 -
8 高级树 AVL树 红黑树
AVL树Balance Factor(平衡因子):是它的左子树的高度减去它的右子树的高度(有时相反)。balance factor = {-1, 0, 1}通过旋转操作来进行平衡(四种)不足:结点需要存储额外信息、且调整次数频繁左旋:右右子树右旋:左左子树左右旋:左右子树右左旋: 右左子树红黑树红黑树是一种近似平衡的二叉搜索树(Binary Search Tree),它能够确保任何一个结点的左右子树的高度差小于两倍。具体来说,红黑树是满足如下条件的二叉搜索树:• 每个结点要么原创 2021-03-17 01:11:28 · 128 阅读 · 0 评论 -
6高级搜索-回溯-双向BFS-A*search
回溯八皇后代码def solveNQueens(self, n): if n < 1: return [] self.result = [] self.cols = set(); self.pie = set(); self.na = set() self.DFS(n, 0, []) return self._generate_result(n)def DFS(self, n, row, cur_state): # recursion terminator i原创 2021-03-17 01:03:23 · 89 阅读 · 0 评论 -
7字典树 并查集
字典树Trie单词查找树或键树。典型应用于统计和排序大量的字符串。最大限度地减少无谓字符串的比较,查询效率比哈希表高。特点结点本身不存完整单词;从根结点到某一结点,路径上经过的字符连接起来,为该结点对应的字符串;每个结点的所有子结点路径代表的字符都不相同核心思想Trie 树的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。class Trie(object): def __init__(self): self.root = {}原创 2021-03-17 01:02:46 · 123 阅读 · 0 评论 -
5 递归 分治 回溯 贪心算法 二分查找 动态规划
递归#pythondef recursion(level, param1,param2,...): #recursion terminator if level > MAX_LEVEL: process_result return #process logic in current level process(level, data...) #drill down self.recursion(level + 1,p1,...) #reverse the current le原创 2021-03-17 00:16:09 · 193 阅读 · 0 评论 -
4树 二叉树 二叉搜索树 堆
#pythonclass TreeNode: def __init__(self, val): self.val = val self.left, self.right = None, Nonepublic class TreeNode { public int val; public TreeNode left, right; public TreeNode(int val) { this.val = val; this.left = null; this.right = n原创 2021-03-15 08:58:12 · 96 阅读 · 0 评论 -
3.栈 队列 哈希表 映射 集合
Stack:先入后出;添加、删除皆为 O(1)最近相关性Queue:先入先出;添加、删除皆为 O(1)先来后到双端队列:deque优先队列 priority queue插入O1 取出logn哈希表(Hash table),也叫散列表,是根据关键码值(Key value)而直接进行访问的数据结构。它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫作散列函数(Hash Function),存放记录的数组叫作哈希表(或散列表)。java•Map:key-va原创 2021-02-23 10:27:53 · 97 阅读 · 0 评论 -
2.数组、链表、跳表
Array数组Linked List链表跳表(skip list):对标的是平衡树(AVL Tree)和二分查找 redis 空间O(n)prepend n 1 1append 1 1 1lookup 1 n logninsert n 1 logndelete n原创 2021-01-25 11:15:27 · 48 阅读 · 0 评论 -
1.开启
多遍重复记忆(脑图)+反复(五毒神掌)最佳方法:5分钟想不出来直接看题解或者高票代码,用五毒神掌变成自己的东西。原创 2021-01-24 11:48:41 · 92 阅读 · 0 评论