综合影响力模型InfG算法

来源:互联网 发布:java方法泛型 t.class 编辑:程序博客网 时间:2024/06/05 00:38

目标

在有用节点集U 中选择k 个初始节点,使其具有最大的传播影响范围。

方法

任一社区内,首先选择影响传播范围F 值最大的节点为起始点,将其加入集合S,并标记其邻居节点。在未标记的节点中继续选择一点,满足两节点所能影响到达的节点集合的和集最大,即节点数目最多,并标记其邻居节点。依此类推,每次选择的节点均为被标记的节点,遍历每个社区,直到选取完满足条件的k’ 个节点为止。

# 参数:节点关系的文件路径,节点传播范围F值的文件路径# 输出文件路径,领袖个数def getLeaders(inputFileName_Node, inputFileName_TKFK, outputFileName, leaderNum):    # 打开文件读入节点关系    with open(inputFileName_Node, 'r') as file:        # 保存节点关系        node = {}        for line in file.readlines():            # 读出文件内容,以制表符分割            line_s = line.strip().split('\t')            # 如果发帖者已存在,直接将跟随者添加            if line_s[0] in node:                node[line_s[0]].append(line_s[1])            # 不存在则先添加发帖者,并将跟随者添加在发帖者里            else:                node.setdefault(line_s[0], []).append(line_s[1])            # 如果跟随者已经在节点里忽略,否则添加            if line_s[1] in node:                pass            else:                node.setdefault(line_s[1], [])    # 打开文件读入传播范围F    with open(inputFileName_TKFK,'r') as fileF:        # 存储节点及对应的F值        value_F = {}        # 标记节点是否已使用        value_Flag = {}        # 读取文件内容        for line in  fileF.readlines():            line_s = line.strip().split('\t')            value_F[line_s[0]] = float(line_s[2])            value_Flag[line_s[0]] = False        # 降序排序f值        value_F_list = sorted(value_F.items(), key=lambda asb:asb[1], reverse=True)    i = 1    # 保存结果    result_list = []    while i <= leaderNum:        for l in value_F_list:            # 如果该节点没使用则标记该节点并放入结果里            if not value_Flag[l[0]]:                value_Flag[l[0]] = True                result_list.append(l[0])                # 标记该节点的所有邻居节点                for u in node[l[0]]:                    value_Flag[u] = True                break        i = i + 1    # 将结果保存至文件    with open(outputFileName, 'w')as fileLeader:        for result in result_list:            fileLeader.write(result + '\n')# 使该程序既能单独运行也能作为模块导入if __name__ == '__main__':    getLeaders(r'D:\PycharmProjects\Demo\data\all.txt',r'D:\PycharmProjects\Demo\data\TkFk.txt',r'D:\PycharmProjects\Demo\data\leader_result.txt',20)
原创粉丝点击