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

背景描述

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

其中一步,需要研究距离桥节点(两个网络的俩连接点)距离为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;     }

结尾

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

最新文章

  1. 复选框css
  2. 自然语言22_Wordnet with NLTK
  3. Eclipse 快捷键 转换为Netbeans 快捷键
  4. 【转】Java集合框架综述
  5. linq简介
  6. oracle分区表(整理)
  7. oracle PL/SQL(procedure language/SQL)程序设计之触发器(trigger)
  8. Volly的使用及图片错位优化
  9. 【POJ1182】 食物链 (带权并查集)
  10. 编写留言板是遇到的mysql中文乱码问题
  11. python基础之 optparse.OptionParser
  12. C#用正则表达式 获取网页源代码标签的属性或值
  13. hdu - 3572 - Task
  14. JDBC-Eclipse &amp; Mysql &amp; Servlet实现
  15. CentOS 7 网卡配置对比
  16. mongodb 创建更新语法
  17. Arch Linux安装后的一些初始设置简介
  18. Unity 4.0 中的新动画系统——MecAnim
  19. SpringSecurity自定义登陆页面和跳转页面
  20. 修改ECSHOP的小数点保留位数

热门文章

  1. orange安装文档
  2. __init__和__new__
  3. Android摄像头测量尺(Advanced Ruler Pro)使用方法
  4. 8位单片机可用的 mktime localtime函数
  5. Struts2笔记03——架构(转)
  6. com.android.dex.DexIndexOverflowException: Cannot merge new index 66299 into a non-jumbo instruction
  7. php数组函数-array_key_exists()
  8. Android电容屏(二):驱动调试分析【转】
  9. 【codevs2333】&amp;【BZOJ2002】弹飞绵羊[HNOI2010](分块)
  10. linux基础(1)-yum源配置