• 寻找节点d=n的节点算法


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

    背景描述

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

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

        }

    结尾

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

  • 相关阅读:
    CF219D
    HDU 4259 Double Dealing 数学题
    HDU1599 find the mincost route 最小环
    HDU3592 World Exhibition 排队判断3种情况
    POJ3694 Network 加边查询剩余桥的个数
    Flex 如何获得Tree 拖动节点的起始位置
    wcf webconfig配置
    学JS面向对象 以及里面的继承
    sqlserver 几种查询耗时
    ubuntu更改文件夹属性
  • 原文地址:https://www.cnblogs.com/freestyle21/p/4457543.html
Copyright © 2020-2023  润新知