这里的算法是毕设过程中,自己想到的,也不知道有不有人提出过。这里就记录下发现的过程的具体的算法,以后会用到

背景描述

毕设做的是「社交网络中病毒传播的预测」,前期过程主要是模拟几个网络的数据,然后从一个节点开始传播,研究传播过程的预测性。

其中一步,需要研究距离桥节点(两个网络的俩连接点)距离为n的节点为病毒源的传播过程。这里产生一个需求:寻找与节点A距离为n的节点们。

毕设过程基本是重复博士生姐姐已发表的论文,不过由于年轻气盛给导师说要自己做,只是博士生姐姐提供主线思路。每次都是自己做出来后,给博士生姐姐讲,然后给我讲他的。发现,寻找离节点A距离n的节点们,博士生姐姐都是用Dijkstra算法先把整个网络的节点距离算出来,再找需要的节点。

但是,这样做的缺点是浪费不必要的时间和空间,因为我们的需求中只需要计算距离特定点A长度d=n的节点们,而不需要计算所有节点的所有距离长度节点。

算法内容

算法思路是根据最直接的想法进行的,即 寻找与节点A距离d=n的节点算法:

  1. 寻找与节点A距离d=n-1的的邻居节点
  2. 第一步的节点中减去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;     }

结尾

以上算法经过毕设结果验证,和博士生姐姐的结果一致,整体运行速度也比其快。 这里粗略记录下研究过程,希望也能感受到毕设中的苦与甜。

寻找节点d=n的节点算法的更多相关文章

  1. 寻找图的强连通分量:tarjan算法简单理解

    1.简介tarjan是一种使用深度优先遍历(DFS)来寻找有向图强连通分量的一种算法. 2.知识准备栈.有向图.强连通分量.DFS. 3.快速理解tarjan算法的运行机制提到DFS,能想到的是通过栈 ...

  2. 剑指Offer(第二版)面试案例:树中两个节点的最低公共祖先节点

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/74612786冷血之心的博客) 剑指Offer(第二版)面试案例:树 ...

  3. 二叉树中两节点的最近公共父节点(360的c++一面问题)

    面试官的问题:写一个函数  TreeNode* Find(TreeNode* root, TreeNode* p, TreeNode* q) ,返回二叉树中p和q的最近公共父节点. 本人反应:当时有点 ...

  4. 深入理解DOM节点类型第二篇——文本节点Text

    × 目录 [1]特征 [2]空白 [3]属性[4]方法[5]性能 前面的话 文本节点顾名思义指向文本的节点,网页上看到的文字内容都属于文本节点.该节点简单直观,本文将详细介绍该部分内容 特征 文本节点 ...

  5. zigbee 路由节点丢失后清除 该节点的残余网络信息

    清除脱离网络的 路由节点(stale device)的 残留在各表中以AssociationDevList为例的残余信息. 如图所示拓扑结构中: 路由器1脱离网络后,通过协调器按键操作来  清除 协调 ...

  6. Query节点操作,jQuery插入节点,jQuery删除节点,jQuery Dom操作

    一.创建节点 var box = $('<div>节点</div>'); //创建一个节点,或者var box = "<div>节点</div> ...

  7. jQuery 获取当前节点的html包含当前节点的方法

    在开发过程中,jQuery.html() 是获取当前节点下的html代码,并不包含当前节点本身的代码,然后我们有时候确需要,找遍jQuery api文档也没有任何方法可以拿到. 看到有的人通过pare ...

  8. MySql 获取当前节点及递归所有上级节点

    -- MySql 获取当前节点及递归所有上级节点 -- 参数说明:resultField:查询返回字段,idd 要查询的资源ID值,idFieldName ID字段名,parentIdFieldNam ...

  9. hadoop 集群 加入一个新的存储节点和删除一个计算节点需要刷新集群状态命令

    加入一个新的存储节点和删除一个计算节点需要刷新集群状态命令 方式1:静态添加datanode,停止namenode方式 1.停止namenode 2.修改slaves文件,并更新到各个节点3.启动na ...

随机推荐

  1. 两个div同时滚动

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  2. Shell字符串操作

    @1:子串削除 ${string#substring} 从$string 的开头位置截掉最短匹配的$substring. ${string##substring} 从$string 的开头位置截掉最长 ...

  3. LeetCode:二叉树的层次遍历||【107】

    LeetCode:二叉树的层次遍历||[107] 题目描述 给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 例如:给定二叉树 [3,9,2 ...

  4. Centos6.6安装mysql记录

    一.环境介绍: 系统:Cerntos6.6 Mysql版本:mysql-5.6.34 二.安装操作: 1.卸载旧版本: rpm -qa |grep mysql mysql-server-5.1.73- ...

  5. 对称加密,API加密

    用于API加密,双方约定好signature_key对请求的参数进行处理 处理步骤如下 把请求的数据生成为key=>value的形式,然后拼接生成arg_key arg_key加上双方约定的si ...

  6. 每天一个Linux命令(59)wget命令

        wget命令用来从指定的URL下载文件.     (1)用法:     用法:  wget  [参数]  [URL]     (2)功能:     功能:  wget命令用来从指定的URL下载 ...

  7. 014_HDFS存储架构、架构可靠性分析、副本放置策略、各组件之间的关系

    1.HDFS存储架构

  8. 数据库自动增长id下一次的值

    mysql SELECT auto_increment FROM information_schema.`TABLES` WHERE TABLE_SCHEMA='my_db_name' AND TAB ...

  9. Listening Carefully SP1403

    Listening Carefully仔细聆听When people talk, listen completely. Most people never listen. ―Ernest Heming ...

  10. git上面创建个人简历-链接

    github创建个人在线简历: https://segmentfault.com/a/1190000006820290