寻找节点d=n的节点算法
这里的算法是毕设过程中,自己想到的,也不知道有不有人提出过。这里就记录下发现的过程的具体的算法,以后会用到
背景描述
毕设做的是「社交网络中病毒传播的预测」,前期过程主要是模拟几个网络的数据,然后从一个节点开始传播,研究传播过程的预测性。
其中一步,需要研究距离桥节点(两个网络的俩连接点)距离为n的节点为病毒源的传播过程。这里产生一个需求:寻找与节点A距离为n的节点们。
毕设过程基本是重复博士生姐姐已发表的论文,不过由于年轻气盛给导师说要自己做,只是博士生姐姐提供主线思路。每次都是自己做出来后,给博士生姐姐讲,然后给我讲他的。发现,寻找离节点A距离n的节点们,博士生姐姐都是用Dijkstra算法先把整个网络的节点距离算出来,再找需要的节点。
但是,这样做的缺点是浪费不必要的时间和空间,因为我们的需求中只需要计算距离特定点A长度d=n的节点们,而不需要计算所有节点的所有距离长度节点。
算法内容
算法思路是根据最直接的想法进行的,即 寻找与节点A距离d=n的节点算法:
- 寻找与节点A距离d=n-1的的邻居节点
- 第一步的节点中减去d=n-2,n-3,。。。,1,0的邻居节点
js写的伪代码(直接用的毕设时的数据结构)
寻找网络Net中距离节点node距离distance的节点们
Net = {
'1': {
'status': 1, // 节点编号1的节点状态是已感染。
'connect': [2,3,4,5] // 节点编号1的节点的邻居节点。
},
...
}
*/
function findDistanceNodes(Net, node, distance) {
var findNodes = [];
if(distance == 0) {
findNodes.push(node);
} else {
// 寻找距离 distance - 1 的节点们的邻居们
var lastDistanceNodes = findDistanceNodes(Net, node, distance - 1);
for(var i =0; i < lastDistanceNodes.length; i++) {
findNodes = array_merge(Net[lastDistanceNodes[i]].connect, findNodes);
}
// 去重
findNodes = rmSameArr(findNodes);
// 从刚才的邻居们中排除 距离node d=0,1,2,3,4,...distance-1的节点
for(var i = 0; i < distance; i++) {
findNodes = minArrFromArr(findNodes, findDistanceNodes(Net, node, i));
}
}
return findNodes;
}
结尾
以上算法经过毕设结果验证,和博士生姐姐的结果一致,整体运行速度也比其快。 这里粗略记录下研究过程,希望也能感受到毕设中的苦与甜。
转载于:https://www.cnblogs.com/freestyle21/p/4457543.html
寻找节点d=n的节点算法相关推荐
- 寻找链表中值域最小的节点并移到链表的最前面
一.题目描述 已知线性链表由list指出,链节点的构造为(data,next),请写一个算法,将链表中数据域值最小的那个节点移动到链表的最前面.(不能申请额外的节点)(更好的阅读体验,请访问程序员在旅 ...
- js遍历树节点下的所有子节点_【数据结构与算法】(3)——树和二叉树
树 树的基本概念 树是一种非线性的数据结构,样子如图所示: 树的主要特点是树中的数据是分层存储的,每个元素称为树的节点,最顶层有且只有一个元素,称为根节点,其余层可以有任意数量的节点.除了根节点,其余 ...
- 剑指Offer之寻找链表倒数第k个节点
题目描述 输入一个链表,输出该链表中倒数第k个结点. 代码及解析 用的快慢指针的思路 public class FindKthValue {static public class ListNode { ...
- 数据结构与算法实验 实验6:二叉树ADT的二叉链式实现 (由完全前序序列创建二叉树 / 求二叉树的节点数/树高/叶子节点数 /先序中序后序层序遍历)
假设二叉数的数据元素为字符,采用二叉链式存储结构.请编码实现二叉树ADT,其中包括创建二叉树.遍历二叉树(深度.广度).求二叉树的深度(高度).计算二叉树的元素个数.计算二叉树的叶子数.二叉树的格式输 ...
- 笔记︱基于网络节点的node2vec、论文、算法python实现
看到一个很有意思的算法,而且腾讯朋友圈lookalike一文中也有提及到,于是蹭一波热点,学习一下.论文是也发KDD2016 . . 一.主要论文:node2vec: Scalable Feature ...
- 层次分析法-基于节点关键度的DTN路由算法
当你看到一个知识点的时候,不是收藏和点赞,而是想办法转化成自己需要的知识,好记性不如烂笔头. 层次分析法 层次分析法(运筹学理论),简称AHP,是指将于决策总是有关的元素分解成目标.准则.方案等层次, ...
- 算法——所有节点对的最短路径:Floyd-Warshall算法、Johnson算法
前言 前面介绍了单源最短路径问题,本文是介绍所有节点对的最短路径问题,首先我们会想到用前面所介绍的知识来求解该问题,根据不同类型的图可以用一下几种方法求解: 若无权重的图,则可以使用次BFS,时间复杂 ...
- 【数据结构与算法】之深入解析“填充每个节点的下一个右侧节点指针”的求解思路与算法示例
一.题目要求 给定一个完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点. 二叉树定义如下: struct Node {int val;Node *left;Node *right;No ...
- Jquery 寻找父、子、兄弟节点
JQUERY的父,子,兄弟节点查找方法 jQuery.parent(expr) 找父亲节点,可以传入expr进行过滤,比如$("span").parent()或者$(" ...
- java 快速从树节点找到数据_数据结构与算法:单向链表和双向链表
一.链表简介 1.链表概念 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列节点组成,节点可以在运行时动态生成,节点包括两个部分:一个 ...
最新文章
- 微信小程序在showToast中换行并且隐藏icon
- 基于分类任务的信号(EEG)处理
- 在CSDN写文章头部生成标题目录
- Boosting AdaBoost
- Python 正则表达式(一)
- ios把数据传递到另一个页面_iOS页面跳转及数据传递(三种)
- spring boot面试_Spring Boot面试问题
- Spring Boot 如何获取 Controller 方法名和注解信息?
- 如果你到了20岁,还没到25岁
- java-ActiveXComponent调用com组件
- 工科数学分析寒假预习day2 正项级数的敛散性
- 服装尺寸 html,服装尺寸对照表_衣服尺码:M、L、XL、XXL、XXXL 分别代表什么尺码...
- c语言用循环转换单词首字母,用c++实现将文本每个单词首字母转换为大写
- 计算机桌面搜狗输入图标不见了怎么办,电脑上搜狗输入法状态栏突然不见了怎么办 如何找到电脑中所失去的输入法...
- 中国名人书画展由世界全媒体联盟中国区及广西明星影视文化传媒有限公司联合举办
- html5 meta keywords,HTML中meta标签及Keywords介绍
- Ubuntu 18.04 U盘启动安装教程【图文教程,非常详细!!!!】
- 解决:steps/make_fbank.sh: line 132: run.pl: command not found
- 五个优秀的硬盘检测工具
- linux系统下grub.cfg详解和实例操作