数据结构与算法:Trie 树 发表于 2017-10-10 | 更新于: 2021-06-02 | 分类于 数据结构与算法 | 阅读次数: 字数统计: 4.6k | 阅读时长 ≈ 20 理论篇大量字符串的存储-查找-排序问题Trie树,又称字典树、前缀树(Prefix Tree)、单词查找树或键树,是一种树形结构,主要用于对大量字符串(不仅限于字符串)的高效存储、查询、排序,经常被搜索引擎系统用于文本词频统计。 以词频统计为例,最直接的想法是使用哈希表来统计每个单词的词频,它的时间 ... 阅读全文 »
数据结构与算法:位运算 发表于 2017-10-10 | 更新于: 2021-06-02 | 分类于 数据结构与算法 | 阅读次数: 字数统计: 4.1k | 阅读时长 ≈ 17 原码-反码-补码 机器数:一个数在计算机中的二进制表示叫做这个数的机器数。机器数是带符号的,在计算机中用一个数的最高位存放符号,正数为0,负数为1。 符号位:机器数的最高位 数值位:机器数的其余位 真值:将带符号的机器数对应的真正数值称为机器数的真值。 原码、反码、补码是机器数的不同编码方式,它们 ... 阅读全文 »
数据结构与算法:图(一)—— 概念 发表于 2017-10-10 | 更新于: 2021-06-02 | 分类于 数据结构与算法 | 阅读次数: 字数统计: 4.7k | 阅读时长 ≈ 19 如果一个问题可以基于实体/状态间的某种多对多的关系来求解,那么可以尝试用图的数据结构和相关算法来求解。用图解决实际问题的一般步骤: 定义图的数据结构:从实际问题中抽象出相互关联的可区分的状态 状态作为图的顶点:将状态参数作为不同顶点的唯一标识; 关联作为节点的边:通过这种关联找到顶点的邻接点; ... 阅读全文 »
数据结构与算法:图(二)—— BFS 发表于 2017-10-10 | 更新于: 2021-06-02 | 分类于 数据结构与算法 | 阅读次数: 字数统计: 7.2k | 阅读时长 ≈ 30 广度优先搜索(Breadth-First-Search,BFS):类似于二叉树的层序遍历,首先访问起始顶点v,接着依次访问v的所有未被访问的邻接点w1,w2,…,再依次访问w1,w2,…所有未被访问的邻接点…,直至所有顶点都已被访问。类似的思想还应用于Prime最小生成树算法和Dijkstra单源最 ... 阅读全文 »
数据结构与算法:并查集 发表于 2017-10-10 | 更新于: 2021-06-02 | 分类于 数据结构与算法 | 阅读次数: 字数统计: 6.5k | 阅读时长 ≈ 28 理论篇动态连通性问题假设用 0~N-1 的整数来表示一组对象,整数对(p,q)可以理解为“对象p和对象q是相连的”,相连是一种对等关系,意味着: 自反性:p和p是相连的; 对称性:p和q相连那么q和p也相连; 传递性:p和q相连,q和r相连,则p和r也是相连的; 对等关系能够将对象分为多个等价类 ... 阅读全文 »
数据结构与算法:线性表(三)—— 双指针 发表于 2017-10-10 | 更新于: 2021-06-02 | 分类于 数据结构与算法 | 阅读次数: 字数统计: 3.4k | 阅读时长 ≈ 14 线性表中的双指针法是指通过两个指针(游标)来指示线性表中的元素的方法。双指针的使用本身并没有什么神奇之处,但是通过合适地操纵指针的移动,在某些特定问题中却能化腐朽为神奇,大大降低算法的时间复杂度。 根据对双指针不同的移动规则,整理了常用的双指针方法及其所用来解决的问题: 双指针法 操作说明 ... 阅读全文 »
数据结构与算法:线性表(二)—— 栈 发表于 2017-10-10 | 更新于: 2021-06-02 | 分类于 数据结构与算法 | 阅读次数: 字数统计: 4.8k | 阅读时长 ≈ 19 理论篇逻辑结构栈(Stack):只允许在一端进行插入或删除操作的线性表。 栈顶:允许插入和删除的那一端 栈底:不允许插入和删除的那一端 存储结构栈多以顺序存储的方式进行存储,同时附设一个top指针指示当前栈顶位置。 C语言实现: 12345# define Maxsize 50typedef s ... 阅读全文 »
数据结构与算法:二分查找 发表于 2017-10-10 | 更新于: 2021-06-02 | 分类于 数据结构与算法 | 阅读次数: 字数统计: 8.4k | 阅读时长 ≈ 36 理论篇二分查找(binary search)又称折半查找(half-interval search),用于在有序数组中以 $O(lgn)$ 的时间复杂度快速查找元素。 问题定义二分查找算法所适用问题的形式化定义:在递增函数$f(x), x \in [l,r]$中, 由函数值y反向求取 ... 阅读全文 »
数据结构与算法:数论 发表于 2017-10-10 | 更新于: 2021-06-02 | 分类于 数据结构与算法 | 阅读次数: 字数统计: 8.8k | 阅读时长 ≈ 41 数论的理论部分详见 math 专题,本部分仅讨论数论相关的核心算法,及其在实际问题中的应用。 整除性与素数辗转相除法 欧几里得算法(Euclidean algorithm):也称为辗转相除法,通常用于计算两个整数的最大公约数,对$0\leqslant m<n$,EA用到以下递推式: \be ... 阅读全文 »
推荐系统(二)—— 基于用户行为推荐 发表于 2017-10-09 | 更新于: 2021-06-02 | 分类于 推荐系统 | 阅读次数: 字数统计: 4k | 阅读时长 ≈ 16 用户行为不是随机的,而是蕴含着很多模式,这里面最著名的例子就是啤酒和尿布的例子。基于用户行为分析的推荐算法是个性化推荐系统的重要算法,学术界一般将这种类型的算法称为协同过滤算法(Collaborative Filtering, CF)。顾名思义,协同过滤就是指通过用户和网站的不断交互,齐心协力过滤掉 ... 阅读全文 »