算法
文章平均质量分 94
南波兔不写巴哥
这个作者很懒,什么都没留下…
展开
-
ASSO 布尔矩阵分解算法 详细分析
ASSO算法解析 布尔矩阵分解原创 2022-02-17 11:11:29 · 1531 阅读 · 0 评论 -
社区发现 louvain(fast unfolding)算法
整个算法是基于Modularity的计算,然后就是迭代,社区改变,然后收缩,继续迭代,社区改变,然后收缩,如此以往。这里贴上算法的流程:算法形式化描述1)初始化:将图中的每个节点看成一个独立的社区,社区的数目与节点个数相同;2)开始first phase迭代 - 社区间节点转移:对每个节点i,依次尝试把节点 i 分配到其每个邻居节点所在的社区,计算分配前与分配后的模块度变化ΔQ3)重复2)- 继续进行社区间节点转移评估:直到所有节点的所属社区不再变化,即社区间的节点转移结束,可以理解为本轮迭原创 2020-06-17 10:36:37 · 2289 阅读 · 2 评论 -
社区发现 GN算法 fast betweeness算法 代码分析
何谓社区发现在社交网络分析与挖掘中,社区发现是一个常用且重要的应用。俗话说,物以类聚,人以群分。社交网络中的节点也是一样。经常聚集成好几团。(上图来自百度)如上图所示,可以分为3个节点簇A、B、C。这里便可以将每个簇称为社区。可以看到其很明显的特征,社区里,各个节点的联系比较多;而社区之间,联系较少。而社区发现,顾名思义,就是将社交网络中的社区给发现出来(似乎等于没说~~)GN算法GN算法是用于社区发现的算法。全程是Girvan Newman,是两位作者的名字组合。该算法的大致思路是:原创 2020-06-14 22:10:38 · 3541 阅读 · 0 评论 -
Manacher(马拉车)算法 清晰详解 代码分析 -查找字符串中所有回文子串
算法问题引入Manacher算法是我在做LeetCode647题时所看到的,该算法的目的是为了更快的查找一字符串中的所有回文子串。在网上看了不少文章和视频,都觉得比较晦涩难懂,所以这里我决定自己写一篇博客来解释这个算法,不仅仅是作为一个讲解,也是加深自己的理解,为了之后更好的复习与回顾。下面,我们便来一步步的解释这个算法。首先,我们要明确,什么是回文字符串。百度百科中这样说:“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。对于这两个单词,我们可以看到回文原创 2020-11-08 17:00:47 · 1340 阅读 · 5 评论 -
布尔矩阵分解 代码实现(BMF)--MEBF论文阅读
关于布尔矩阵分解最近在做有关布尔矩阵分解方面的研究,因为自己的方向需要,找了有关布尔矩阵分解的一干论文看了看。关于布尔矩阵分解,实际就是对于一个布尔矩阵Am∗nA_{m*n}Am∗n(其中元素非0即1)来分解成Bm∗kB_{m*k}Bm∗k与Ck∗nC_{k*n}Ck∗n,其中B与C也同样是布尔矩阵(其中元素非0即1),也就是将一个大型的布尔矩阵给分解为两个低秩矩阵的乘积。其英文为Boolean Matrix Factorization,或者Boolean Matrix decompositio原创 2020-10-16 11:18:10 · 1987 阅读 · 0 评论 -
知识表示学习 TransE 代码逻辑梳理 超详细解析
知识表示学习网络上已经存在了大量知识库(KBs),比如OpenCyc,WordNet,Freebase,Dbpedia等等。这些知识库是为了各种各样的目的建立的,因此很难用到其他系统上面。为了发挥知识库的图(graph)性,也为了得到统计学习(包括机器学习和深度学习)的优势,我们需要将知识库嵌入(embedding)到一个低维空间里(比如10、20、50维)。我们都知道,获得了向量后,就可以运用各种数学工具进行分析。它为许多知识获取任务和下游应用铺平了道路。总的来说,废话这么多,所谓知识表示学习,就原创 2020-09-02 16:38:22 · 9862 阅读 · 17 评论 -
字典学习(KSVD)详解
关于字典学习对于一个事物,我们如何表征它呢?很明显,这个事物是有特征的,或者说,这个事物它是由许多个不同的特征经过一定的组合而形成的。字典学习的目标是提取实物的最本质特征。用字典来表征该事物的特征。当提取出了事物的特征,这就相当于一种降维。对于如何理解字典学习,我想到这样一个例子,比如一堆三维向量,找寻它们的特征,实际上,我们可以用三维直角坐标系(x,y,z三个单位向量)来表征它们,这三个向量通过组合可以表示所有的三维向量,它们就是我们的字典,再搭配上每个三维向量的x,y,z组合方式(稀疏编码),也就原创 2020-07-14 17:17:07 · 21199 阅读 · 12 评论 -
二叉树(& BST)的前序、中序、后序遍历(递归与迭代),java BST的构建
关于前序中序后序遍历比如上图正常的一个满节点,A:根节点、B:左节点、C:右节点,前序顺序是ABC(根节点排最先,然后同级先左后右);中序顺序是BAC(先左后根最后右);后序顺序是BCA(先左后右最后根)。皆是根节点(当前节点)访问的位置来命名,都是用dfs来实现。前序:中左右中序:左中右后序:左右中java代码实现-递归前序:void dfs(TreeNode root) { visit(root); dfs(root.left); dfs(root.right)原创 2020-10-29 21:06:33 · 1118 阅读 · 0 评论 -
寻找重复数(LeetCode287)-快慢指针法寻找圈入口的数学证明
关于题目本题最好的解法是利用快慢指针来寻找圈的入口,快慢指针的概念这里我就不多说了。先讲一下题目:给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。 示例 1: 输入: [1,3,4,2,2] 输出: 2 示例 2: 输入: [3,1,3,4,2] 输出: 3针对这个问题,很多人的做法是这样,利用快慢指针。 [1,3,4,2,2] (0,1,2,3,4)上述原创 2020-11-12 10:02:54 · 194 阅读 · 0 评论 -
kmp算法原理分析 next数组原理解释 代码详细注释
关于为什么要进行一个前缀的记录,记录公共前缀和next数组的构建我明白了,对于为何是prefix[j-1]我也懂了,我代码中有写,结合那哥们的图我也能讲的更明白一些。然后关于kmp为何能缩小时间复杂度我也懂了,用我pad上画的那个便可以来解释了,而且很清晰然后好好整理整理,写一篇好的博客。这个算法还是比较难,但也是挺不错的一个算法,花了我一整天...原创 2020-11-13 11:22:28 · 1496 阅读 · 2 评论