数据结构学习记录——图应用实例-六度空间(题目描述、算法思路、伪代码及解读、图解)

news2025/1/7 6:15:08

目录

题目描述

算法思路

伪代码

总体算法

BFS算法

伪代码解读

BFS算法

图解


题目描述

六度空间理论的核心观点是,人类社交网络中的任何两个人之间,平均只需要通过不超过六个中间人(也就是六个社交关系)就可以建立联系。换句话说,你通过你认识的某个人,再通过他们认识的另一个人,以此类推,最终可以与世界上任何一个陌生人建立联系。

现假设给定了一个社交网络图,请对每个节点计算符合“六度空间”理论的节点占节点总数的百分比。

算法思路

对每个节点,进行广度优先搜索;

搜索过程中累计访问的节点数;

需要记录“层”数,仅计算6层以内的节点数。 

伪代码

总体算法

void SDS()
{
    for( each V in G )
    {
        count = BFS(V);
        Output(count/N);
    }
}

BFS算法

int BFS(Vertex V)
{
    visited[V] = true;
    count = 1;
    level = 0;
    last = V;
    Enqueue(V, Q);

    while (!IsEmpty(Q))
    {
        V = Dequeue(Q);
        for (每个邻接点W of V)
        {
            if (!visited[W])
            {
                visited[W] = true;
                Enqueue(W, Q);
                count++;
                tail = W;
            }
        }

        if (V == last)
        {
            level++;
            last = tail;
        }

        if (level == 6)
            break;
    }

    return count;
}

伪代码解读

BFS算法

visited[V] = true; count = 1;

将起始节点 V 标记为已访问,并将计数器 count 初始化为 1。

level = 0; last = V;

初始化层级 level 为 0,最后一个节点 last 为起始节点 V。

Enqueue(V, Q);

将起始节点 V 入队,Q为队列,用于存储待访问的节点。

随后当队列不为空时进入while循环

从队列中取出一个节点 V。

然后开始遍历节点 V 的每个邻接点 W,即与节点 V 相连的节点。

如果邻接点 W 没有被访问过,则执行以下操作:

  • 将邻接点 W 标记为已访问。
  • 将邻接点 W 入队。

 

增加计数器 count,表示访问的节点数量,并更新最后一个节点的位置为 W。 

 

 

如果当前节点 V 等于最后一个节点 last,表示完成了当前层的遍历。

所以就增加层级 level,并将最后一个节点更新为当前层的最后一个节点。

如果层级达到 6,即搜索到了六度空间的节点,跳出循环。

最后,返回从起始节点出发的路径上经过的节点数量。 

 

对于tail以及last的作用:

图解

最开始,last等于V:

然后对节点1进行出队列操作存在在V中,并将节点1的所有邻接点入队,对节点1的最后一个邻接点赋给tail:

 

前面我们看到节点1已经出了队列,并被存储在V,判断V == last,如果相等,则表明已经遍历完一层了:

level++,把tail赋给last:

然后开始新一轮的循环,直到来到节点7,节点7的最后一个邻接点赋给tail,即节点19;此时last指向节点7;如此,通过last和tail来判断进入下一层。 

 


end


学习自:MOOC数据结构——陈越、何钦铭

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/562014.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多台plc之间如何快速实现以太网无线连接?

常规来说,多台plc要实现以太网无线连接,首先要先确定以太网线必须正确连接,并建立物理连接。然后需要在PLC端设置好IP地址,以使不同PLC以相同协议可以实现通信交流。最后是建立PLC端数据采集及交换系统,要求在PLC端设置…

《封号码罗》关于js逆向猿人学第二题cookies里面m值的获取[纯扣算法](二十六)

这一题有点儿误打误撞的感觉。 本题使用了抓包工具Fiddler,m值在cookie里面,而且这个cookie是本地生成的 抓包发现有两次请求,第一次返回了一堆JS,而且cookie里面没有m值,第二次请求就带上了m值,所以m应该…

信号完整性分析基础知识之传输线和反射(七):带负载传输线、感性不连续引起的反射

带负载传输线 如果在传输线上有一个小的容性负载,信号会出现失真,上升时间也会降低。每个分立电容都会降低信号在其附近看到的阻抗。如果传输线上分布有多个容性负载(例如一个总线上每隔1.2inch有一个2pF的连接器残桩,或者一个内…

单模光纤一维模场分布的MATLAB仿真

根据已知的单模光纤电场z分量分布,可以用MATLAB展示一维的模场分布 具体来说,通过数值计算解出给定光纤(n_1,n_2,a)参数时对应的V参量 通过特征方程解出V对应的W和U 通过这三个参数带入到光场的表达式中…

07. 算法之一致性哈希算法介绍

前言 哈希算法在程序开发中的很多地方都能看到他的身影,但是哈希有他的局限性,比如如果两个key哈希到同一个位置的时候,此时就不好处理。本节我们介绍一下常规处理方式。 1. 什么是哈希算法 哈希算法将任意长度的二进制值映射为较短的固定…

界面控件DevExtreme使用指南 - 如何自定义上下文菜单和工具栏

DevExtreme File Manager(文件管理器)小部件现在支持自定义内置的工具栏和上下文菜单,用户可以使用标准和定义的命令项填充项目集合,并配置设置来更改其外观和操作。 DevExtreme拥有高性能的HTML5 / JavaScript小部件集合&#x…

基于Keras-YOLO实现目标检测

Keras-YOLO 3项目使用Python语言实现了YOLO v3网络模型,并且可以导入Darknet网络预先训练好的权重文件信息直接使用网络进行目标识别。 1. 下载Keras-YOLO 3项目 执行如下命令下载Keras-YOLO 3项目代码: git clone https://github.com/qqwweee/keras-…

直播和短视频美颜sdk的开发流程、代码分析

目前,美颜技术是提高视频质量的重要手段之一,特别是短视频和直播两个行业。本文将介绍其开发流程和代码分析。 一、美颜SDK的开发流程 1.需求分析 首先我们需要明确的一点就是“需求”,例如:美颜效果、美颜程度、性能要求等。同…

解决找不到微信支付V3版本公钥问题

参考微信文档链接为签名验证-接口规则 | 微信支付商户平台文档中心 写的内容特别不明显,往下面看会找到 下载openssl工具使用命令从私钥证书中导出即可。

地图在线编辑平台,无基础轻松实现私域地图

位构云平台让用户轻松构建诸如空间信息管理、建筑信息管理及三维空间数据可视化、导航等类型应用的多平台、综合型地图引擎,基于OpenGLES/WebGL三维可视化技术体系的自主研发图形引擎,可以让开发者轻松构建运行在 Web、Android、iOS 等多平台的应用程序。…

安捷伦DSO80404B(Agilent)dso80404b租售回收 数字示波器

DSO80404B 是 Agilent 的 4 GHz、4 通道数字示波器。测量电子电路或组件中随时间变化的电压或电流信号,以显示振幅、频率和上升时间等。应用包括故障排除、生产测试和设计。 附加功能: 4 GHz 带宽,可升级至 13 GHz 4个模拟通道 高达 40 G…

day10 前端技术-HTMLCSS

HTML 含义:超文本标记语言,静态网页,用于在浏览器显示数据 双标签:<> </>,开始标签和结束标签同时出现 单标签: 属性名:属性后面的值都加双引号 常用的HTML标签 :文档的根标签 :HTML页面的头部标签 “”:页面标题 “”:页面主体部分 “ “ “ 到 ”:标题…

『树莓派云台机器人』02. 电脑连接树莓派 配置开发环境

目录 1. 下载ssh交互工具 Xshell 与XFTP&#xff08;有过相关使用经历的朋友可以跳过这一节内容&#xff09;2. 下载VNC远程控制工具软件3. 连接过程4. Xshell 命令工具5. XFTP 文件传送工具6. 关于联网总结 欢迎关注 『树莓派云台机器人』 博客&#xff0c;持续更新中 欢迎关注…

PoseiSwap IDO在Bounce上启动在即,如何参与?

目前&#xff0c;Nautilus Chain 生态基本完成测试&#xff0c;并即将在不久上线主网。PoseiSwap 作为 Nautilus Chain 上的首个 DEX&#xff0c;也即将面向市场并上线正式版本。我们看到&#xff0c; PoseiSwap 也正式发布了新的市场进程&#xff0c;基于其治理代币 POSE 的 I…

转辙机介绍

简介 转辙机是指用以可靠地转换道岔位置&#xff0c;改变道岔开通方向&#xff0c;锁闭道岔尖轨&#xff0c;反映道岔位置的重要的信号基础设备&#xff0c;它可以很好地保证行车安全&#xff0c;提高运输效率&#xff0c;改善行车人员的劳动强度。 分类 01、转辙机按动作时…

如何做出有价值的知识管理文档?

知识管理文档是企业中重要的资产&#xff0c;它可以帮助企业员工更好地理解业务流程、产品功能、标准操作等信息。如何做出有价值的知识管理文档&#xff0c;满足员工知识需求&#xff0c;提高工作效率&#xff0c;本文将探讨以下几个方面&#xff1a; 一、制定有效的知识管理…

jsp网上鞋城系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java 网上鞋城系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5 开发&#xff0c;数据库为Mysql&#xff0c;使用j…

建议熟知:2023谷歌新搜索规则!

谷歌作为全球最大的搜索引擎之一&#xff0c;不断更新和调整其搜索算法和规则&#xff0c;以提供更精准、高质量的搜索结果。2023年&#xff0c;谷歌搜索将迎来一系列新的搜索规则&#xff0c;同时&#xff0c;AI工具的快速发展也为谷歌搜索带来了全新的应用场景和可能性。 这…

基于Go开发PaaS平台1

Go开发PaaS平台核心功能 代码仓库地址GitHub - yunixiangfeng/gopaas 1 云原生PaaS平台介绍 随着云计算的发展&#xff0c;越来越多的企业逐步的把IT资源迁移到云上。PaaS平台作为基础设施基座&#xff0c;可以帮助企业快速构建功能丰富的容器云平台&#xff0c;提升交付效率…

应用在智能手表中监测温度的数字红外接近检测模块

智能手表是将手表内置智能化系统、搭载智能手机系统而连接于网络而实现多功能&#xff0c;能同步手机中的电话、短信、邮件、照片、音乐等。显示方式包括指针、数字、图像等。随着对于健身、运动的高度关注&#xff0c;以及大众购买力的增强&#xff0c;智能手表这个可穿戴设备…