美文网首页
DSA.dataStructure.algorithm 数据结构

DSA.dataStructure.algorithm 数据结构

作者: daydaygo | 来源:发表于2024-08-25 13:20 被阅读0次
  • 思路: 枚举/暴力(规范/协议)->子问题/状态压缩/剪枝->最优解
    • 多画图
  • 方法
    • dimension.维度 scope.范围 classify.分类 field.domain.领域 boundary.边界 interval.区间: 左闭(0/1开始)右开? 边界=Layer层=规范=协议=O(mn) > O(m+n) 环/假溢出? 连续?
    • 协=2+参与者 议=行为约定与规范
    • 中间层 -> 问题复杂度 M*N \rightarrow M+N -> 社会分工越来越细, 各行各业制定标准
    • 有序.sort
      • 二分法: 快/慢 左/右 order.正/逆/倒序 前/后; 二分->四分
    • 递归=base+recursive=栈 优化=循环/尾递归
  • pl
    • py: array bisect collections sortedcontainers(Map TreeMap)
    • java: HashMap HashSet
  • name.命名.参数: ans/res ij kv pqr mn-len-Node Tmp Flag-Fn-Func Left-Right Start-End First-Last Fast-Slow small-big high-mid-low Row-Cloumn-Box visited
  • ADT.abstractDataType DFA.DeterministicFiniteAutomaton.有限自动机 面试编程.PREP.parametersReturnExamplePseudocode.IO.TDD

DS

  • 存储=链式+顺序 逻辑=线性(arr/link/stack)+非线性(tree/graph) op=CRUD.Retrieve.查 traversal.遍历=iteration.迭代+recursion.递归 RandomAccess.随机访问 SequentialAccess.顺序访问
  • arr.array.数组.线性表 vec.vector.向量.顺序线性表 slice.切片 list.列表 prefixSum.前缀和.连续问题
    • 空间压缩 环形数组.取模
    • mat.matrix.二维.棋盘状态 symmetricMatrix.对称矩阵 sparseMatrix.稀疏矩阵 三维.魔方类游戏
  • stack.栈 LIFO pop.push DFS
    • op: polishNotation.波兰表达式.前缀.中缀.后缀 括号匹配.栈匹配 栈实现队列
    • monotoneStack.单调栈: 下一个大于/小于 边界-哨兵法; 广义栈
  • queue.队列 FIFO.FistInFirstOut front/back enqueue/dequeue BFS
    • monotonicQueue.单调队列
    • deque.双端队列.pool
    • ring.环.循环.固定长度缓冲区读写.io缓冲区
  • linkedList.链表
    • 画图 迭代操作(head+pre+cur+next) 固定头结点.表头节点.哑结点dummyNode.哨兵节点
    • op: reverse.反转 中值 奇偶 快慢 相交.环
    • singleLinkedList.单链表 doubleLinkedList.双向链表 LinearList.线性链表 staticList.静态链表
  • hash.哈希.散列 hashTable dict.字典 map.映射 kv.keyValuePair.键值对 symbolTable.符号表 assocArray.关联数组
    • hashFunction.散列函数 解决碰撞.填充因子 conflict.冲突.抽屉原理 separateChain.链地址法.拉链法 开放地址=linearProbing线性探查+线性补偿探测+随机探测
    • rehash 渐进式rehash
    • consistentHash.一致性hash DHT.分布式hash
      • uint32环 node(真实节点)/replica(虚拟节点) 顺时针查找第一个
      • judge: balance monotonous.单调 spread load
    • MurmurHash: 规律输入依然可以给出很好的随机分布+计算速度
    • xxHash: https://xxhash.com
  • string.字符串匹配
    • KMP FSM.FiniteStateMachine.有限状态机 模式匹配有限状态机 BM BM-KMP BF RK
    • approximate/fuzzy.模糊匹配 suffixArr.后缀数组
    • trie.字典树.前缀树 动态路由.查找.词频统计 路由=restful/fixed/regex/custom/auto/annotation+param.:id+method.GET+namespace.v1
      • radixTree.基数树
  • tree 度.根.叶.兄弟.高度 无序.有序 二叉.多叉 大部分算法技巧本质上都是树的遍历问题
    • binaryTree.二叉树 满 complete.完全 Serialization.序列化
      • op: 遍历(pre前.in中.after后 层次.bfs) create(前序+中序 树状数组) depth(min max) lca.leastCommonAncestors.最近公共祖先
      • BST.binarySearchTree.搜索.查找 -> binarySortTree.退化为链表的性能问题 -> Balance.平衡/AVL/RBT.redBlackTree.红黑树 -> 区间树.区间查询.区间重叠判断-> 线段树.叶子节点区间范围之和.区间重叠判断.统计学(大区间+小区间)
      • binaryIndexedTree.二叉索引树.树状数组 segmentTree.线段树.区间树 HuffmanTree.哈夫曼树 b+.数据库索引
      • doubleChainedTree.双链树
    • 多叉: B.文件管理.数据库.多路+有序 B+.终端节点处理不同 2-3 2-3-4
    • Huffman_coding.霍夫曼编码 merkleTree.哈希二叉树.区块链
    • k-dTree(游戏中碰撞检测 4维/8维) DOM/HTML/AST/XML
  • set hashSet treeSet DisjointSet
  • map hashMap treeMap
  • heap.堆
    • array实现: 极大堆/极小堆/极大极小堆/优先级队列.priorityQueue.os线程调度 双端堆.Deap d叉堆
    • tree实现: binaryHeap.二叉堆 左堆 扁堆 二项式堆 fibHeap pairingHeap.配对堆
  • find.查找 unionFind.并查集
    • 路径压缩+秩优化实现 每个集合元素个数+最大集合元素个数实现 并查集是一种思想 特殊节点.地图/砖块/网格
    • hash binarySortTree.排序二叉树 AVL/B/B+/B*/AA/RBT/splay/DCT/R binaryHeap
    • skipList.跳表
  • graph.图 graphTheory.图论 seen-vis-visted
    • 权 向 入度出度 连通/强连通 DirectedGraph有向图 DAG.DirectedAcyclicGraph.有向无环图.任务编排
    • op: 遍历(dfs bfs) create.邻接表-稀疏.邻接矩阵-矩阵运算
    • algo: dijkstra.最短路径.非负权边 Bellman-Ford最短路径.负权边 Floyd 最小生成树(Kruskal&Prim) 二分图(染色法) 拓扑排序 fordFulkerson最大流 A*搜索.A星寻路.启发式搜索 图匹配 网络流
  • other: LFU LRU.LRU-K.LRU-2Q 分桶

algo

  • NP完全: bigO.时间/空间 所有组合 必须考虑所有情况 序列.旅行商问题 集合.广播台集合

  • math.bit位操作

  • binarySearch.二分查找 思路很简单细节是魔鬼 闭区间+边界检查

    • 经典解法.low<=high 4个变种.^= $= ^>= $<= 最大化最小化问题
  • sort.排序

    • 类型: 交换(冒泡 快排.qsort.quickSort.pdqsort) 插入(直插 shell希尔) 选择(简选 quickSelectSort.快选 堆) mergeSort.归并(二路 多路) 基数 计数(计数信息=排序结果) 桶 线性 自省 间接
    • 外部: k路归并败者树 最佳归并树
  • 暴力=枚举=打表法 状态/不重不漏/效率

    • 排列组合 子集 映射2^n
  • DC.分治

    • RC.ReduceConquer.减治.小问题只解决一个大问题就解决了: 二分查找 randomizedSelect.随机选择
  • DP.动态规划=状态+状态转移方程+边界情况

    • 暴力递归->带memo递归->DP状态->memo状态压缩->状态间关系 memo.备忘录->status.状态压缩 trim.剪枝 最优解 子问题离散&不依赖其他子问题 网格
    • 最优二叉搜索树
      • Knapsack.背包 subKnapsack.子集背包 completeknapsack.完全背包 01knapsack
      • subsequence.子序列 LCS.LongestCommonSubsequence.最长公共子序列
  • greedy.贪心.贪婪 每步最优解>全局最优 scheduleProblem.调度问题 jumpGame.跳跃游戏 gameProblem.博弈问题

  • backtracking.回溯 迷宫

  • search.搜索

    • 枚举.迷宫 DFS.deepFirstSearch.深度优先 BFS.BreadthFirstSearch.seen 启发式搜索
  • 分支定界法

  • 大数据

    • BF.bloomFilter.布隆过滤器: 概率型数据结构 概率型算法 替代.Cuckoo/Hyperloglog
    • ai
  • security安全: bcrypt.目前最安全密码散列 sha.局部不敏感=局部变化散列值完全不同 simhash.局部敏感.网页是否搜集+论文是否抄袭+版权检查

  • other

    • LB.LoadBalance: rand roundRobin.取余 weightRoundRobin p2c
    • limit: 滑动窗口(频率/并发上限) tokenBucket(令牌桶 瞬时流量)
    • timingWheel.时间轮: 延迟操作
    • 2point.双指针: 快慢指针+左右指针
      • SlidingWindow.滑动窗口: 连续问题 快慢指针/固定间距指针
  • 精选题解: 字典序列删除 前缀和 二叉树序列化 最长上升子序列 最长公共子序列 最大子序列和 股票买卖 打家劫舍

  • topk: qsort全局排序.分治->冒泡.局部排序->heap->rc减治.rs随机选择.只排序k个元素的区

  • InvertedIndex倒排索引: 搜索引擎

  • epoll: readBlackTree+doubleList

bit Bit_numbering Category:Binary_arithmetic

  • 进制 进制转换: bin oct hex(n&15 n>>=4 n%16 n//=16) 11 0b11 011 0x11
    • binary 二进制; decimal 十进制; hex 十六进制; octal 8进制
  • int
    • uint8 byte ascii: chr ord 'a'^' '='A' 'A'|' '='a' 'a'&'_'='A'
    • signed/unsigned 机器数&真值 trueForm.原码 反码=除符号位按位取反 Complement.补码=反码+1
    • str2int int2str
  • op &.and |.or ^.xor ~.not << >> 算术右移 逻辑右移.最高位补0 移位与除法 奇偶n&1 n>>1 %2 末位n&1
    • 幂等律a|a=a 交换律a|b=b|a 结合律a&b&c=a&(b&c) 分配律a&(b|c)=(a&b)|(a&c)
    • 德摩根~(a&b)=(~a)&(~b) 取反-a=~(a-1) 异或^ i^0=i i^i=0 4i^(4i+1)^(4i+2)^(4i+3)=0
    • lsb.最低有效位 消除n&(n-1) 只保留n&-n n&(~(n-1)) msb oneCnt
    • add divide hammingDistance
  • bitmap.位图.bitset 32/64k,v:=n/64,n%64 str2biti|=1<<(v-'a')
  • dp.状态压缩: 只有2种状态&n<=20
  • mask 右n位清零x&(~0<<n) n位bit(x>>n)&1 n位幂值x&(1>>(n-1)) n位设为1.n1x|(1<<n) n位设为0.n0x&(~(1<<n))

math

  • 进制转换 阶乘 素数 快速幂 杨辉三角 裴蜀定理 斜率 fib
  • 最大公约数: 辗转相除法=欧几里得算法 更相减损术(九章算术)-位运算(奇偶)
  • 排列组合 C_{n+m-2}^{m-1}
  • 约瑟夫环dp[i]=(dp[i-1]+m)%i
  • 快速幂求余x^a \odot p=(x^2 \odot p)^{a/2} \odot p
  • 算术几何不等式\dfrac{n_1+n_2+...+n_a}{a}>=\sqrt[a]{n_1n_2...n_a}
  • 公式推导 f(n)=\dfrac{1}{n}x1.0+\dfrac{1}{n}x0.0+\dfrac{1}{n}\sum\limits_{i=2}^{n-1}f(n-i+1)
// 减法变加法
a + ^(b-1) // a-b

leetcode

  • leetcode lintcode acmcoder.赛码 Hackerrank 牛客网 codetop.企业题库 codewars vjudge geeksforgeeks oi-wiki.信息奥林匹克 the-algorithms javascript-algorithms
  • LeetCode题解src/go: // id https://leetcode.cn/problems/{title} 题解=tag+思路 题解.多语言代码块.java [] 专题/模板
    • 题解: 自己读题 -> 15分钟还没思路 -> 看题解 -> 完全不会才看代码/记笔记 -> coding/debug
    • lucifer.力扣加加.91algo.leetcode-solution
    • labuladong/fucking-algorithm 算法有套路.算法小抄
    • halfrost/LeetCode-go leetcode-cookbook 阿里霜神
    • LeetCodeAnimation LeetCode101.c++.谷歌师兄刷题笔记

leetbook

  • 位运算与数学
  • 数据结构
    • 数组和字符串 数组类算法
      • 基本概念+操作方式; 二维数组; 字符串 概念+特性; KMP算法; 双指针
    • 链表
    • 哈希表 查找表类算法
    • 队列和栈
    • 二叉树 二叉搜索树 前缀树 N叉树
    • 图解数据结构
  • 算法
    • 初级算法 中级算法 高级算法
    • 递归 二分查找
  • AI数学基础
  • 漫画算法

leetcode tool

  • leetcode web
    • problemset题库
      • 分类: 算法 剑指offer 程序员面试金典6 hot100 top200
      • 标签tag: 学了一个知识后, 按标签刷, 快速巩固: bit-manipulation.位运算
      • session.设置-进度管理
    • circle社区: 题解
    • code题目页面: 模拟面试 快捷键(⌘' ⌘↩︎) 使用上一次的编辑 还原 playground调试 测试用例 可视化 收藏中心
  • leetcode app
    • 摇一摇切换中英文描述/随机一题
    • 学习分析
  • help
    • plus: 付费精选题目和内容; 企业题库; 企业模拟面试(免费可 随机); 题目热度; 极速判题; playground(调试)
      • 模拟面试: 1-3题, 30-90分钟
    • 竞赛: 报名 -> AC +1分, 每次错误 +5min 罚时
    • 个人主页: 做题进度 收藏/笔记/积分 订单 账号
    • 技术问题
      • 各语言对应版本和环境: phpinfo() => 7.2
      • 全局变量和类内静态变量 -> 手动初始化
      • stdout 打印: debug + 增加耗时
      • 二叉树序列化
      • timeout.leetcode的锅 TLE.TimeLimitExceeded.代码的锅
  • 力扣刷题插件.lucifer
    • 题解模板/查看题解
    • 代码: 一键复制所有测试用例 禅定模式
    • 代码模板: 前缀和(一维 二维) 二分法(baisc+4变种) BFS(是否带层信息) 堆(最小堆) 滑动窗口(固定窗口/可变窗口) 回溯(标准 笛卡尔积优化) 前缀树 并查集(是否带权) 线段树(区间和 计数)
    • 数据结构可视化
    • 复杂度速查
    • 学习路线: 动态规划 树 链表 二分
  • 如何刷题
    • 题解: 自己读题 -> 15分钟还没思路 -> 看题解 -> 完全不会才看代码/记笔记 -> coding/debug
    • 按专题(tag)刷 -> 模板/笔记/多题同解
      • 构建知识体系/框架/套路
    • 广度优先而非深度(死磕某一个知识)
    • 掌握编程语言
    • 模拟面试: 时间观念+一次AC
    • 训练目标: AC数量 AC速度 AC通过率 竞赛排名前100 beats-CPU/mem-100%
      • bug-free: 基础数据结构+算法形成肌肉记忆 单测+调试
    • code: 命名name(简洁&一致性) 小心全局变量 提交后查看排名->分段->看100%的代码 直接使用系统api
    • debug: 批量测试 数据可视化
    • 锁定使用哪种算法: 记忆/题感/暴力解(暴力+剪枝 大力出奇迹) 关键字 限制条件+复杂度速查 分治思维
  • 九章算法
    • 企业题库 领扣lintcode题库(Java c++ py)
    • 免费课:ai 企业题库/面试 算法
    • 发现:求职面试 学习笔记 上班摸鱼
    • 消息
    • 我:发布 收藏 学分 学习记录

leetcode.tag

  • Fundamentals 基本
    • Array 数组
    • Matrix 矩阵
    • String 字符串
    • StringMatching 字符串匹配
    • Sorting 排序
    • BucketSort 桶排序
    • CountingSort 计数排序
    • RadixSort 基数排序
    • Simulation 模拟
    • Enumeration 枚举
  • Algorithms 算法
    • DynamicProgramming 动态规划
    • Depth-FirstSearch 深度优先搜索
    • Breadth-FirstSearch 广度优先搜索
    • Greedy 贪心
    • BinarySearch 二分查找
    • Backtracking 回溯
    • Recursion 递归
    • DivideandConquer 分治
    • Memoization 记忆化搜索
    • Quickselect 快速选择
    • MergeSort 归并排序
  • CommonDataStructures 基础数据结构
    • HashTable 哈希表
    • Tree 树
    • BinaryTree 二叉树
    • Stack 栈
    • Heap(PriorityQueue) 堆(优先队列)
    • Graph 图
    • LinkedList 链表
    • BinarySearchTree 二叉搜索树
    • MonotonicStack 单调栈
    • Queue 队列
    • OrderedSet 有序集合
    • TopologicalSort 拓扑排序
    • ShortestPath 最短路
    • Doubly-LinkedList 双向链表
    • MonotonicQueue 单调队列
    • MinimumSpanningTree 最小生成树
    • StronglyConnectedComponent 强连通分量
    • EulerianCircuit 欧拉回路
    • BiconnectedComponent 双连通分量
  • AdvancedDataStructures 高级数据结构
    • UnionFind 并查集
    • Trie 字典树
    • SegmentTree 线段树
    • BinaryIndexedTree 树状数组
    • SuffixArray 后缀数组
  • Techniques 技巧
    • TwoPointers 双指针
    • BitManipulation 位运算
    • SlidingWindow 滑动窗口
    • PrefixSum 前缀和
    • Counting 计数
    • Bitmask 状态压缩
    • HashFunction 哈希函数
    • RollingHash 滚动哈希
    • LineSweep 扫描线
  • Math 数学
    • Math 数学
    • Geometry 几何
    • GameTheory 博弈
    • Randomized 随机化
    • Combinatorics 组合数学
    • NumberTheory 数论
    • ProbabilityandStatistics 概率与统计
    • ReservoirSampling 水塘抽样
    • RejectionSampling 拒绝采样
  • Other 其他
    • Database 数据库
    • Design 设计
    • DataStream 数据流
    • Interactive 交互
    • Brainteaser 脑筋急转弯
    • Iterator 迭代器
    • Concurrency 多线程
    • Shell
# fetch/xhr grphql questionTagTypeWithTags
a = json.loads(s)
a = a['data']['questionTagTypeWithTags']
for i in a:
    print("-", i['name'].replace(" ", ""), i['transName'])
    for j in i['tagRelation']:
        j = j['tag']
        print("  -", j['name'].replace(" ", ""), j['nameTranslated'])

mark


  • 算法帝国 算法之美
  • 算法通关之路 2021.8 LeetCode题解
  • 剑指offer 名企面试官精讲典型编程题 专项突破版; 2021.8
  • 大话数据结构; 程杰 2020.12
  • CTCI Cracking the coding interview 程序员面试金典6 2019.9; 程序员面试金典ed5 2013.11
  • 漫画算法: 小灰的算法之旅; 2019.5
  • 程序员的算法趣题
    • 2 2023.5; 内存优化+动态规划
    • 1 2017.7
  • grokking algorithms 算法图解; 2017.3; 入门佳作
  • 妙趣横生的算法; C++语言实现 2014.10; C语言实现2 2015.3
  • 算法的乐趣; 王晓华.orbit 2015.3
  • Programming Pearls 编程珠玑; 2014.12
  • 挑战程序设计竞赛ed2; 2013.7
  • 数据结构与算法分析 java语言描述; 邓俊辉 2013
  • Introduction to Algorithms 算法导论 ed3; 2012.12; 2层, 一层培养算法思维+使用现有的结论, 一层深入算法的数学证明(这层可选择); MIT算法导论.bilibili
  • TAOCP theArtOfComputerProgramming 计算机程序设计艺术 ed3; 1基本算法 2半数值算法 3排序与查找 4A组合算法
  • Algorithms 算法ed4; 2012.10; 阅读计划.ituring-wechat
  • 程序员实用算法 2009.9
  • 编程之美 微软技术面试心得; 刘铁锋 2008.3

  • 如果使用循环,程序的性能可能更高;如果使用递归,程序可能更容易理解。如何选择要看什么对你来说更重要。-- Leigh Caldwell
  • Haskell 等函数式编程语言就没有循环,因此你只能使用递归来编写这样的函数。如果你对递归有深入的认识,函数式编程语言学习起来将更加容易。如果你喜欢递归或者想学习一门新语言,可以研究一下 Haskell
  • 数据结构是典型的面向对象思维 算法是典型的面对过程思维
  • 学习算法是非常有趣和令人激动的; 但是算法, 就是解决问题时的那份「优雅」.
  • 算法4特征.Knuth: 确定 有穷 可行 IO; 程序=算法+数据结构; 问题的数学模型->IO->算法
  • 算法与解释: 清单.算法的生活化解读 算法自身是没有任何企图的.算法不是道德主体.可接受vs不可接受 不同表达方式.解释算法 一切皆有可能vs无限可能 透明性.可计算.可判断.可靠.安全
  • 算法与现实: 书写符号.字典查找/加减法 打孔卡片制表机.鼓浪屿风琴博物馆 data.gov

相关文章

  • IOS开发_数据结构

    1、数据结构; 2、算法; 3、数据结构与算法; 1、数据结构; 1.1 概念: 数据结构:数据结构是计算...

  • py基础

    5Python集合容器 数据结构数据结构 一般将数据结构分为两大类: 线性数据结构和非线性数据结构。 线性数据结构...

  • 思维导图之数据结构+算法

    数据结构+算法 = 程序 数据结构比较 参考文章 数据结构与算法数据结构与算法(java)

  • 数据结构与算法分析:大纲]

    00数据结构与算法分析:大纲01数据结构:数组02数据结构:链表03数据结构:栈03数据结构:队列 本系列课程主要...

  • 数据结构:数组

    00数据结构与算法分析:大纲01数据结构:数组02数据结构:链表03数据结构:栈03数据结构:队列 数组 数组是一...

  • 数据结构—概述

    数据结构概述 数据结构概述:程序设计 = 数据结构 + 算法数据结构:数据元素之间存在所有特定关系的集合,数据结构...

  • OVS 源码分析整理

    OVS 核心代码 OVS 架构 OVS 主要的数据结构数据结构关系图主要的数据结构和数据结构的参数数据结构代码 d...

  • 01. 数据结构与算法绪论

    一、数据结构 1. 什么是数据结构 2. 数据结构的分类 3. 常用的数据结构 4. 数据结构的应用表现 二、算法...

  • 数据结构与算法 - 查找

    数据结构与算法系列文章数据结构与算法 - 时间复杂度数据结构与算法 - 线性表数据结构与算法 - 树形结构数据结构...

  • C#之数据结构(上)

    数据结构 一般将数据结构分为两大类: 线性数据结构和非线性数据结构。 线性数据结构有: 线性表、栈、队列、串、数组...

网友评论

      本文标题:DSA.dataStructure.algorithm 数据结构

      本文链接:https://www.haomeiwen.com/subject/bbankjtx.html