![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
马超的博客
Stay Hungry, Stay Foolish
展开
-
基于ONgDB图数据库实现组织机构相似性碰撞分析
基于ONgDB图数据库实现组织机构关系相似性碰撞分析此部分实现是组织机构消歧任务的其中一部分,主要对于组织机构的相似性进行分析。主要针对组织机构的特有性数据进行图数据建模,实现关系节点的映射,然后从节点关系的关联方式进行分析。在此基础上还可以进一步优化分析方式,例如在计算相似度时加入对组织机构别名编辑距离的计算,综合杰卡尔德相似度与编辑距离的相似度计算结果。一、数据模型二、测试数据集三、导入数据四、运行计算五、计算结果展示...原创 2020-05-16 16:56:11 · 983 阅读 · 0 评论 -
ONgDB并发计算节点相似度
节点间相似度计算以下测试均在ongdb完成一、Jaccard相似度 - algo.similarity.jaccard - Mode.WRITE1、创建测试数据CREATE (a:Person {name:'Alice'})CREATE (b:Person {name:'Bob'})CREATE (c:Person {name:'Charlie'})CREATE (d:Person {name:'Dana'})CREATE (i1:Item {name:'p1'})CREATE (i2原创 2020-05-16 15:31:08 · 1089 阅读 · 0 评论 -
基于Neo4j图数据的三角计数社区发现算法
形成一个社区在所有类型的网络中都很常见,识别它们对于评估群体行为和突发现象都很重要。通常来说,社区的成员在群体内的关系比在群体外的节点多,这是社区检测的一般原则。识别这些相关集体可以揭示节点群集、独立组和网络结构。此信息有助于推断对等的各组的相似行为和偏好、弹性估算和查找嵌套关系,也可以为其他分析准备数据。社区检测算法也常用于生成用来做一般性检测的网络可视化图。原创 2020-03-16 18:32:51 · 1560 阅读 · 0 评论 -
寻找数组中的逆序对
题目描述: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。public class Solution26 { public static void InversePairs(int[] value){ for (int i=0;i<value.length-1;i++){原创 2017-04-13 22:30:29 · 675 阅读 · 0 评论 -
顺时针打印矩阵
题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. public class Solution25 { public static ArrayList<Integ原创 2017-04-13 20:38:44 · 262 阅读 · 0 评论 -
二叉树的镜像
题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10原创 2017-04-13 17:01:10 · 275 阅读 · 0 评论 -
树的子结构
题目描述: 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 解题思路: (要养成一个习惯,对任何一个树节点进行访问时,一定要提前检测该节点是否为空) 1、首先设置标志位resul = false,因为一旦匹配成功result就设为true,剩下的代码就不会执行,如果匹配不成功,默认返回false; 2、递归思想,如果根节点相同则递归调用Same原创 2017-04-13 16:03:07 · 288 阅读 · 0 评论 -
从上往下打印二叉树
题目描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 解题思路: 这道题的本质就是二叉树的层次遍历! 备注: java 堆栈中的方法poll和pop区别如下: pop:相当于get的操作,就是只是查看。从此列表所表示的堆栈处弹出一个元素。 poll:相当于先get然后再remove掉,就是查看的同时,也将这个元素从容器中删除掉。 获取并移除此列表的头(第一个元素)pub原创 2017-04-17 23:11:53 · 357 阅读 · 0 评论 -
数组中只出现一次的数字
题目描述: 输入数组中有一个不重复的数字,请找出他 解题思路: 做异或运算! 任何一个数异或他自己都等于0。public class Solution31 { public static int FindNumsAppearOnce(int[] array){ int res =0; for (int i=0;i<array.length;i++){原创 2017-04-17 22:27:38 · 326 阅读 · 0 评论 -
求1+2+3+...+n
题目描述: 求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 解题思路: 利用逻辑与的短路特性实现计算。 1.需利用逻辑与的短路特性实现递归终止。 2.当n==0时,(n>0)&&((sum+=Sum_Solution(n-1))>0)只执行前面的判断,为false,然后直接返回0; 3.当n>原创 2017-04-12 23:41:55 · 363 阅读 · 0 评论 -
连续子数组的最大和
题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?(子向量的长度原创 2017-04-13 22:50:39 · 356 阅读 · 0 评论 -
不用加减乘除做加法
题目描述: 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。 解题思路: 首先看十进制是如何做的: 5+7=12,三步走 第一步:相加各位的值,不算进位,得到2。 第二步:计算进位值,得到10. 如果这一步的进位值为0,那么第一步得到的值就是最终结果。第三步:重复上述两步,只是相加的值变成上述两步的得到的结果2和10,得到12。同样我们可以用三步走的方式计算原创 2017-04-13 23:37:49 · 323 阅读 · 0 评论 -
把数组排成最小的数
题目描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 解题思路: 将数组元素存入动态数组,然后调用集合的sort()的方法,实现Comparator接口的compare方法,将集合元素按照compare规则进行排序。然后将元素进行拼接。public clas原创 2017-04-18 16:55:06 · 433 阅读 · 0 评论 -
最小的K个数
题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 package algorithm.offer;import java.util.ArrayList;/** * Created by Administrator on 2017/4/18. */public class Solution34 { pu原创 2017-04-18 23:10:13 · 411 阅读 · 0 评论 -
数据流中的中位数
题目描述: 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。 解题思路: 将输入的数组先进行排序,然后寻找中位数。 下面代码使用的是直接选择排序的方法。** * Created by Administrator on 2017/4/14. */pu原创 2017-04-14 22:01:22 · 381 阅读 · 0 评论 -
整数中1出现的次数(从1到n整数中1出现的次数)
题目描述: 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。 解题思路: 传入一个整数转换为字符串存入字符串数组,然后遍历这个数组找1,count++;N-1继原创 2017-04-19 21:40:28 · 611 阅读 · 0 评论 -
左旋转字符串
题目描述: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它! 备注: char是字符类型,string是字符串类型(刚开始使用栈的思路做的)。publi原创 2017-04-16 23:42:25 · 395 阅读 · 0 评论 -
算法Map
树 二叉树 Huffman树 图 深度优先搜索 广度优先搜索 最小生成树(Prim) 最小生成树(Kruskal) 单源最短路径(Dijkstra) 每对顶点间的最短路径(Floyd) 查找 顺序查找 二分查找(折半查找) 基于索引表的分块查找 散列表(直接地址法、拉链法、平均查找长度) 散列映射 二叉排序树 树映射 平衡二叉树 排序 插入排序 直接插入排原创 2017-04-17 10:10:37 · 889 阅读 · 0 评论 -
基于目标群体的潜在人物挖掘
基于目标群体的潜在人物挖掘一、目标群体中存在潜在关系的人物挖掘二、案例测试一、目标群体中存在潜在关系的人物挖掘目标:通过对当前多个节点的标签、关系、属性的分析,从社交图谱中挖掘与目标群体关系紧密的潜在人物。1、遍历路径拿到与目标人群有关联的所有人2、计算潜在人与目标群体关系紧密度得分,并将得分更新到属性3、使用targetGroupPersonDiggerRelaCount属性排序(...原创 2019-04-03 21:12:31 · 854 阅读 · 0 评论 -
全源最短路径的应用
全源最短路径的应用一、最短路径-CYPHER自带函数二、全源最短路径-neo4j-graph-algorithms算法包1、isFinite函数的使用2、将图形作为无向图处理3、大图运算三、通过全源最短路径算法寻找路径紧密度排序1、路径R的权值设置2、增加存储过程3、使用关系属性COST计算DISTANCE4、使用距离默认值计算DISTANCE一、最短路径-CYPHER自带函数输入:两个节点...原创 2019-04-08 20:04:18 · 824 阅读 · 0 评论 -
数组中重复的数字
题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。 解题思路: 构造一个容量为N的辅助数组B,原数组A中每个数对应B中下标,首次命中,B中对应元素+1。如果某次命中时,原创 2017-04-12 23:04:05 · 429 阅读 · 0 评论 -
JAVA基础知识整理(十) ---算法
算法(推荐剑指offer,算法导论,编程珠玑) 1.写单例(懒汉单例,饿汉单例,线程安全的单例) 2.写排序算法 时间复杂度n方的排序:选择,插入,冒泡 时间复杂度n*logn的排序:快排,归并,堆排,希尔(这个较少) 3.递归(简单如斐波那契那种,复杂的挺多的,多看看剑指offer刷刷牛客) 4.动态规划(dp我不会) 算法是一条漫长的路,刚开始刷题肯定是困难的,但是一定要敢写,可以原创 2017-04-03 21:41:53 · 419 阅读 · 0 评论 -
合并两个排序的链表
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 解题思路如图: public class Solution21 { public static class ListNode{ int val; ListNode next = null; public ListNode(int va原创 2017-04-12 22:13:47 · 446 阅读 · 0 评论 -
重建二叉树
二叉树的存储结构: 主要采用链式存储结构,顺序存储结构仅适用于完全二叉树(满二叉树)。 将完全二叉树的结点按次序进行编号,实际上是对完全二叉树的一次层次遍历。 完全二叉树能够采用顺序存储结构存储,依靠数组元素的相邻位置反映完全二叉树的逻辑结构。所以,完全二叉树能够采用顺序储存结构存储,依靠元素的相邻位置反映完全二叉树的逻辑结构。 由于顺序存储结构没有特别的存储元素间的关系,不存原创 2017-04-09 14:06:24 · 370 阅读 · 0 评论 -
链表的逆转(使用栈和动态数组)
import java.util.Stack;import java.util.ArrayList;public class Solution3 { public static class ListNode { int val; ListNode next = null; ListNode(int val) { thi原创 2017-04-09 10:03:52 · 604 阅读 · 0 评论 -
单链表的逆转
输入一个链表,从尾到头打印链表每个节点的值。 public class Solution3 { public static class Node<T>{ public T data; //数据域 public Node<T> next; //地址域 public Node(T data,Node<T> next){ //构造结点原创 2017-04-08 23:21:53 · 588 阅读 · 0 评论 -
线性存储的随机数集合
//线性存储的随机数集合public class Solution6 { public static void print(Object[] value){ //输出对象数组元素,静态方法。时间复杂度为O(n) for (Object obj:value){ System.out.println(obj == null ? "null":""+obj原创 2017-04-08 20:51:06 · 584 阅读 · 0 评论 -
辗转相除法
//辗转相除法public class Solution4 { public static int gcd(int a,int b){ while (b !=0){ int temp = a%b; // %取余数,比如10%3 结果为1; /除法,取整,比如10/3 结果为3。 System.out.println("temp原创 2017-04-08 20:02:23 · 276 阅读 · 0 评论 -
替换空格
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 //解题思路:遍历字符串找到空格字符串位置,然后用%20替换public class Solution2 { public static String repalceSpace(StringBuffer str){ if原创 2017-04-08 15:41:53 · 345 阅读 · 0 评论 -
二维数组中的查找
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。/** * Created by Administrator on 2017/4/8. */public class Solution { public static boolean find(int target,int原创 2017-04-08 15:19:32 · 301 阅读 · 0 评论 -
偶数大翻转
问题描述: 输入n个数,请将其中的偶数的二进制反转。 eg:输入1 6 5 其中6是偶数,二进制表示为110,反转后为011,代表3,所以最终输出1 3 5. 结题思路: 思路就是先将输入数字中的偶数解析出来,然后再转String,记下当前二进制位数,然后反序右移32-len。import java.util.Scanner;public class Main{ public原创 2017-04-08 14:44:21 · 636 阅读 · 0 评论 -
用两个栈实现队列
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。public class Solution9 { static Stack<Integer> a = new Stack<Integer>(); static Stack<Integer> b = new Stack<Integer>(); public void push(int node原创 2017-04-10 21:31:23 · 319 阅读 · 0 评论 -
旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 备注:这是二分查找的变形应用。 请注意下面代码只是笔记没有参考价值。public clas原创 2017-04-10 23:30:24 · 339 阅读 · 0 评论 -
直接选择排序
直接选择排序算法思想: 1.第一趟从数组中选出最大/小元素,放在数组最后/最前的位置; 2.下一趟从数组中n-1个元素中选择出次最大/次最小的元素,放在次最后/最前的位置; 3.经过n-1趟完成排序。//int a[]={5,8,6,2,7,4,1,3}; 请用选择法对数组a中的整数由小到大进行排序。public class Solution11 { public st原创 2017-04-11 13:22:38 · 283 阅读 · 0 评论 -
反转链表
题目描述: 输入一个链表,反转链表后,输出链表的所有元素。 解题思路: 初始化两个指针(变量),保存当前节点的next,然后让当前节点的next指向前一个节点;进行节点的翻转,当前节点为前一个结点,当前节点的下一个节点为当前节点,当前节点的前一个节点变为翻转后的第一个节点。//反转链表//输入一个链表,反转链表后,输出链表的所有元素。public class Solution19 {原创 2017-04-12 21:45:09 · 300 阅读 · 0 评论 -
链表中倒数第k个结点
题目描述: 输入一个链表,输出该链表中倒数第k个结点。 解题思路: 定义两个指针(变量),刚开始都指向链表第一个节点; 然后第一个指针先进行一个循环走(K-1)步; 然后两个指针一起走,当第一个指针走到链表末尾的时候,第二个指针所指的位置就是倒数第K个节点。//链表中倒数第k个结点//输入一个链表,输出该链表中倒数第k个结点。public class Solution18 {原创 2017-04-12 21:19:10 · 309 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面
题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 解题思路: 创建两个动态数组,将奇数添加到LS1,将偶数添加到LS2,然后将LS2中的元素全部添加到LS1;最后将LS1中的元素全部打印出来。public class Solution17 { pub原创 2017-04-11 23:02:17 · 242 阅读 · 0 评论 -
二进制中1的个数
题目描述: 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 解题思路: 直接进行与运算,将一个整数减1后与原来整数进行与运算,能进行几次运算就有几个1。计算中负数就是用补码来表示的。 详细解释: 如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)原创 2017-04-11 22:00:35 · 229 阅读 · 0 评论 -
矩形覆盖
题目描述: 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 解题思路: 依旧是斐波那契数列 2*n的大矩形,和n个2*1的小矩形 其中target*2为大矩阵的大小 有以下几种情形: 1⃣️target <= 0 大矩形为<= 2*0,直接return 1; 2⃣️t原创 2017-04-11 20:59:11 · 345 阅读 · 0 评论 -
变态跳台阶
题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 解题思路: 关于本题,前提是n个台阶会有一次n阶的跳法。分析如下: f(1) = 1 f(2) = f(2-1) + f(2-2) //f(2-2) 表示2阶一次跳2阶的次数。 f(3) = f(3-1) + f(3-2)原创 2017-04-11 17:05:44 · 298 阅读 · 0 评论