算法
文章平均质量分 81
CC‘s World
这个作者很懒,什么都没留下…
展开
-
【算法】局部敏感哈希 LSH 的 Python 实现
一、哈希算法普通的哈希算法:把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值。最理想的是所有不同的输入都可以映射到散列值,但是存在这种可能性的。当不同的输入映射到相同的散列值时,就称为碰撞冲突。哈希算法是要避免碰撞冲突,而局部敏感哈希(Locality-Sensitive Hashing, 下面我们简称LSH)则相反,是要创造更多的碰撞冲突。二、局部敏感哈希在很多领域中,经常会使用最近邻查找,例如人脸匹配、指纹匹配等,输入一个人脸数据(一般对应一个向量),然后跟数据库中的所有人脸原创 2022-05-20 14:21:42 · 5760 阅读 · 3 评论 -
【算法】GBDT & XGBoost
一、GBDTGDBT(Gradient Boosting Decision Tree)是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的结论累加起来做最终结果。它在被提出之初就和SVM一起被认为是泛化能力(generalization)较强的算法。近些年更因为被用于搜索排序的机器学习模型而引起广泛关注。GBDT是一个应用很广泛的算法,可以用来做分类、回归。在很多的数据上都有很不错的效果1.1 决策树决策树分为俩大类,分类树和回归树。分类树是我们比较熟悉的决策树,比如C4.5分类决策树。分类树用原创 2022-05-18 16:06:42 · 4270 阅读 · 0 评论 -
【算法】决策树模型 & 集成算法模型GBDT
决策树 ID3C4.5CART剪枝GBDT原创 2021-12-26 18:51:29 · 2225 阅读 · 0 评论 -
【算法】0-1背包、完全背包和多重背包
一共有n个物品,每个物品的重量为w[i],价值为v[i],背包总容量为V,要求出背包所能装下的最大总价值。dp[i][j]表示前i件物品装入容量为j的背包,能得到的最大总价值。0-1背包:每个物品只能取0个或1个。dp[i][j]=max(dp[i-1][j], dp[i-1][j-w[i]]+v[i])dp[i-1][j]代表这个物品不放入背包dp[i-1][j-w[i]]+v[i]代表这个物品放入背包dp = [[0 for col in range(V+1)] for row in ra原创 2021-03-10 18:24:21 · 223 阅读 · 0 评论 -
【算法】KMP算法解决字符串匹配
【背景】我们想要从文本串中找到模式串开始的index。例如:文本串text:aabaabaaf模式串pattern:aabaaf当暴力匹配时:aabaabaafaabaafaabaabaafaabaaf…aabaabaafaabaaf本次匹配的时候遇到了冲突,下一次匹配的时候继续从aabaabaaf\ aabaaf开始匹配。但是这样的暴力匹配浪费了大量的时间,所以有了KMP算法来解决字符串匹配。应用KMP算法时,当遇到aabaabaafaabaaf这原创 2021-01-06 21:12:45 · 492 阅读 · 0 评论 -
【算法】 深度优先搜索(DFS)和广度优先搜索(BFS)
【深度优先搜索(DFS)】深度优先搜索的思想是:从一个顶点出发,沿着一条路一直走到底,如果发现不能到达目标解,那就返回到上一个节点,然后从另一条路开始走到底。深度优先搜索借助栈这种数据结构来实现,其操作如下:初始结点入栈重复以下步骤,直到栈为空: 访问栈顶元素,如果栈顶元素的所有相邻结点都已被访问过,则将栈顶元素从栈中弹出。否则,找出与栈顶元素相邻且未被访问过的结点,将该结点标记为已访问过的结点并入栈【广度优先搜索(BFS)】广度优先搜索的思想是:从一个顶点出发,辐射状地优先遍历其周原创 2020-05-21 12:12:35 · 635 阅读 · 0 评论 -
【算法】 各种排序算法比较
【冒泡排序】思想:一共进行n轮,每一轮都让最小的数字往上冒。即:若arr[i+1]<arr[i],则交换arr[i+1]和arr[i]。平均时间复杂度:O(n^2)最好情况:O(n^2)最坏情况:O(n^2)优点:稳定缺点:慢【插入排序】思想:在一个已经有序的小序列的基础上,一次插入一个元素。平均时间复杂度:O(n^2)最好情况:O(n)最坏情况:O(n^2)优点:稳...原创 2020-05-19 12:52:16 · 559 阅读 · 0 评论 -
【算法】 归并排序原理及Python代码实现
将两个的有序数列合并成一个有序数列,称之为"归并"。归并排序采用分治策略(分而治之,在“分”的阶段将问题分成一些小的问题然后递归求解,在“治”的阶段将前一阶段的到的答案整合在一起)。归并排序的算法流程大体分为三部:分解:以mid = (low + high)/2为分裂点,将当前区间一分为2;求解:递归地对两个子区间进行归并排序,递归的终结条件是子区间长度为1;合并:将有序的两个子区间归并为一个有序的区间。在合并时,所采用的策略是:设定两个指针,最初位置分别为两个已经排序序列的起始位置;比较两个指针原创 2020-05-19 12:30:45 · 230 阅读 · 0 评论 -
【算法】 希尔排序原理及Python代码实现
希尔排序是一种插入排序算法,其核心思想是缩小增量排序。希尔排序在数组中采用跳跃式分组的策略,通过某个增量将数组元素划分为若干组,然后分组进行插入排序,随后逐步缩小增量,继续按组进行插入排序操作,直至增量为1(最后一趟是直接插入排序)。希尔排序的每一趟排序都会使整个序列变得有序,小的基本在前,大的基本在后。等到整个序列有序了,那么再使用增量为1的插入排序的话那么就会使得排序的效率提高,到增量为1时,其实多数情况下只需微调即可,不会涉及过多的数据移动。初始增量为gap=length/2,常用的增量是以2为跨度原创 2020-05-19 12:03:47 · 207 阅读 · 0 评论 -
【算法】 堆排序原理及Python代码实现
堆是具有以下性质的完全二叉树(若设二叉树的深度为h,除第 h 层外,其它各层的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。):每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。对堆中的结点按层进行编号,并将将这种逻辑结构映射到数组中,则有:大顶堆:arr[i] >= arr[2i+1]...原创 2020-05-18 19:28:00 · 252 阅读 · 0 评论 -
快速排序原理及Python代码实现
【原理】快速排序的算法就是以每轮都以某种方式选择一个基准数据,然后为基准数据找到其正确的索引位置。【过程】每一轮: 选择一个基准数据,比如temp=array[0] start=0, end=len(array)-1 while start<end: 从后往前扫描,当array[end]>temp时,end-=1 array[start]=array[end],这样...原创 2020-02-24 11:22:57 · 224 阅读 · 0 评论