Python数据结构实验 查找实验(一)

一、实验目的

1.熟悉查找的基本概念,包括静态查找表和动态查找表、内查找和外查找之间的差异以及平均查找长度等;

2.掌握线性表上的各种查找算法,包括顺序查找、折半查找和分块查找的基本思路、算法实现和查找效率等;

3.灵活运用线性表各种查找算法解决一些综合应用问题。

二、实验环境

1.Windows操作系统的计算机

2.Python3.7环境平台和PyCharm编辑器

三、实验说明 

1.实现线性表上的各种相关算法程序设计和查找过程。    
2.实验中如无特别说明,均要求使用脚本(.py)方式编写代码。

3.自主编写程序,必要时参考相关资料。

4.实验学时:2学时

四、实验内容和步骤

1.实验内容

(1) 编写一个实验程序,对一个递增有序表进行折半查找,输出成功找到其中每个元素的查找序列,用相关数据进行测试。

参考思路:

def BinSearch(R,k):     #拆半查找非递归算法

    n=len(R)

    L=[]                                                                 #存放查找序列

    low,high=0,n-1

while low<=high:      #当前区间非空时

        mid=(low+high)//2      #求查找区间的中间位置

        L.append(R[mid])

        if k==R[mid]:

              return L

        if k<R[mid]:      #继续在R[low..mid-1]中查找

                  ……





#主程序

a=[______            ]

print()

print("  整数序列:",a)

for i in range(len(a)):

    L=_________

    print("  查找%d的查找序列:" %(a[i]),end='')

    print(L)







(2)假设一个带权图G采用邻接矩阵存储,设计一个算法,采用狄克斯特拉算法思路,求顶点s到顶点t的最短路径长度(假设顶点s和t都是G中的顶点)。

参考思路:

from MatGraph import MatGraph,INF,MAXV



def Dijkstra(g,s,t):                      #基本Dijkstra算法,求从s到t的最短路径长度

    dist=[-1]*MAXV                      

    S=[0]*MAXV                         

    for i in range(n):

        dist[i]=g.edges[s][i]           

    S[s]=1                         

    u=-1

    for i in range(n-1):              

        mindis=INF                    

        for j in range(n):   

            if S[j]==0 and dist[j]<mindis:

                u=j

                mindis=dist[j]

        if u==t:return dist[t]              

        S[u]=1                        

        for j in range(n):            

            if S[j]==0:                   

                if g.edges[u][j]<INF and dist[u]+g.edges[u][j]<dist[j]:

                    dist[j]=dist[u]+g.edges[u][j]

    return INF





#主程序

g=MatGraph()

n,e=_ _,_  _

a=[……]                                              #图7.35的边数组

g.CreateMatGraph(a,n,e)

print("图g")

g.DispMatGraph()

s=_   _

t=_   _

print("求解结果");

print("%s->%d的最短路径长度:%d" %(s,t,Dijkstra(g,s,t)))





2.实验步骤

(1)分析实验内容,写出程序大致框架或完整的程序代码。

(2)进入Python集成环境。

(3)编辑程序并进行保存。

(4)运行程序,若有错误,修改错误后再次运行,如此反复进行到不显示出错为止。

(5)检查程序输出结果。

五、实验代码与结果(程序运行代码及其结果)

1. (1)给出算法的基本设计思想。

  (2)根据设计思想,采用Python语言描述算法,关键之处给出注释。

def BinSearch(R,k):          #拆半查找非递归算法

    n=len(R)

    L=[]                                                                 #存放查找序列

    low,high=0,n-1

    while low<=high:      #当前区间非空时

            mid=(low+high)//2  #求查找区间的中间位置

            L.append(R[mid])

            if k==R[mid]:

                  return L

            if k<R[mid]: #继续在R[low..mid-1]中查找

                high=mid-1

            else:     #k>R[mid]

               low=mid+1 #继续在R[mid+1..high]中查找

    return -1         #当前查找区间空时返回-





#主程序

a=[2,4,7,8,9,10,14,18,26,32,40]

print()

print("  整数序列:",a)

for i in range(len(a)):

    L=BinSearch(a,a[i])

    print("  查找%d的查找序列:" %(a[i]),end='')

print(L)


2. (1)给出算法的基本设计思想。

  (2)根据设计思想,采用Python语言描述算法,关键之处给出注释。

from 图 import MatGraph,INF,MAXV



def Dijkstra(g,s,t):                      #基本Dijkstra算法,求从s到t的最短路径长度

    dist=[-1]*MAXV

    S=[0]*MAXV

    for i in range(n):

        dist[i]=g.edges[s][i]

    S[s]=1

    u=-1

    for i in range(n-1):

        mindis=INF

        for j in range(n):

            if S[j]==0 and dist[j]<mindis:

                u=j

                mindis=dist[j]

        if u==t:return dist[t]

        S[u]=1

        for j in range(n):

            if S[j]==0:

                if g.edges[u][j]<INF and dist[u]+g.edges[u][j]<dist[j]:

                    dist[j]=dist[u]+g.edges[u][j]

    return INF





#主程序

g=MatGraph()

n,e=6,10

a=[[1,3,1,4,INF,INF],

    [1,3,1,INF,4,INF],

    [5,2,0,5,2,1],

    [8,INF,8,8,INF,8],

    [INF,6,6,INF,6,6],

    [INF,INF,9,9,9,9]]                                              #图7.35的边数组

g.CreateMatGraph(a,n,e)

print("图g")

g.DispMatGraph()

s=1

t=9

print("求解结果");

print("%s->%d的最短路径长度:%d" %(s,t,Dijkstra(g,s,t)))

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

游戏引擎中的声音系统

一、声音基础 1.1 音量 声音振幅的大小 压强p&#xff1a;由声音引起的与环境大气压的局部偏差 1.2 音调 1.3 音色 1.4 降噪 1.5 人的听觉范围 1.6 电子音乐 将自然界中连续的音乐转换成离散的信号记录到内存中 采样 - 量化 - 编码 香农定理&#xff1a;采样频率是信…

云原生技术精选:探索腾讯云容器与函数计算的最佳实践

文章目录 写在前面《2023腾讯云容器和函数计算技术实践精选集》深度解读案例集特色&#xff1a;腾讯云的创新实践与技术突破精选案例分析——Stable Diffusion云原生部署的最佳实践精选集实用建议分享总结 写在前面 在数字化转型的浪潮下&#xff0c;云计算技术已成为企业运营…

shell脚本发布docker-nginx vue2 项目示例

docker、git、node.js安装略过。 使git pull或者git push不需要输入密码操作方法 nginx安装在docker容器里面&#xff0c;参见&#xff1a;https://blog.csdn.net/HSJ0170/article/details/128631155 姊妹篇&#xff08;宿主机nginx&#xff0c;非docker-nginx&#xff09;&am…

Real-data WRF | setup and run and experiment

前言 Parent Model 用于初始化和边界条件的网格数据 GFS/FNL、NAM、RAP/HRRR、重新分析&#xff08;NARR、CFSR、NNRP、ERA-interim、ERA5 等&#xff09;、其他 WRF 运行 WPS WRF 预处理系统&#xff08;由 geogrid、ungrib 和 metgrid 程序组成&#xff09; WRF 模拟几…

【Linux多线程】生产者消费者模型

【Linux多线程】生产者消费者模型 目录 【Linux多线程】生产者消费者模型生产者消费者模型为何要使用生产者消费者模型生产者消费者的三种关系生产者消费者模型优点基于BlockingQueue的生产者消费者模型C queue模拟阻塞队列的生产消费模型 伪唤醒情况&#xff08;多生产多消费的…

【手册】——mq延迟队列

目录 一、背景介绍二、思路&方案三、过程1.项目为啥用延迟队列&#xff1f;2.项目为啥用三方延迟队列&#xff1f;3.项目中为啥用rabbitmq延迟队列&#xff1f;4.rabbitmq延迟队列的安装5.rabbitmq的延迟队列配置方式5.1.exchange配置5.2.queues配置5.3.exchange和queues的…

文件操作(1)【文件打开和关闭】【文件的顺序读写(各种函数)】【sprintf和sscanf的理解】

一.什么是文件&#xff1f; 在程序设计中我们一般谈的文件有两种&#xff1a;程序文件和数据文件 1.程序文件 程序文件是包含计算机程序代码的文件。它通常包含一系列指令和算法&#xff0c;用于执行特定的任务或实现特定的功能。程序文件可以由不同的编程语言编写&#xff…

【C语言环境】Sublime中运行C语言时MinGW环境的安装

要知道&#xff0c;GCC 官网提供的 GCC 编译器是无法直接安装到 Windows 平台上的&#xff0c;如果我们想在 Windows 平台使用 GCC 编译器&#xff0c;可以安装 GCC 的移植版本。 目前适用于 Windows 平台、受欢迎的 GCC 移植版主要有 2 种&#xff0c;分别为 MinGW 和 Cygwin…

【Python】——变量名的命名规则

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

Linux shell编程学习笔记42:md5sum

0 前言 前几天在国产电脑上遇到一个问题&#xff0c;先后接到两个文件&#xff0c;如何判断这两个文件内容是否相同&#xff1f; 如果是在Windows系统&#xff0c;可以用fc命令&#xff0c;或者用我自己写的FileInfo&#xff0c;提取两个文件有MD5、SHA1、CRC32值进行比较来判…

GANs和Diffusion模型(3)

接GANs和Diffusion模型&#xff08;2&#xff09; 扩散(Diffusion)模型 生成学习三重困难(Trilemma) 指生成学习(genrative learning)的模型都需要满足三个需求&#xff1a; 高质量的采样(High Quality Samples)&#xff1a;模型应该能生成非常高质量的采样快速采样(Fast S…

使用 Python 模拟布朗运动(和股票价格)

一、说明 本文先介绍布朗运动的概念&#xff0c;紧接着应用布朗方程到股票的随机斩落模型。进而用python实现&#xff0c;并给出各种各样的条件模型。从中烘托出股票模型的规律所在。 二、什么是布朗运动&#xff1f; 布朗运动以罗伯特布朗的名字命名&#xff0c;他是第一个在通…

持续交付与持续部署相关概念(CD)

目录 一、概述 二、持续交付基本概念 2.1 持续交付的含义 2.1.1 项目管理的视角 2.1.2 产品研发的视角 2.1.3 总结 2.2 持续交付涉及的运作环境 2.2.1 开发环境 2.2.2 测试环境 2.2.3 UAT环境 2.2.4 准生产环境 2.2.5 生产环境 2.3 总结 三、持续部署基本概念 3.…

创新之路:云边对接与行业生态的前沿探索

全球 80% 的数据来自物联网&#xff0c;不论是传统行业还是新兴行业&#xff0c;都将利用更多有价值的数据来驱动业务&#xff0c;实现降本增效。智慧教育、资产追踪、环境监测、工业物联网、智慧城市、家居互联、智慧电力、智慧农业。从智能电表到智能家居&#xff0c;从机器人…

RAG:检索增强生成系统如何工作

随着大型语言模型&#xff08;LLM&#xff09;的发展&#xff0c;人工智能世界取得了巨大的飞跃。经过大量数据的训练&#xff0c;LLM可以发现语言模式和关系&#xff0c;使人工智能工具能够生成更准确、与上下文相关的响应。 但LLM也给人工智能工程师带来了新的挑战&#xff…

shopee、lazada、temu测评自养号策略解析

在跨境电商领域&#xff0c;测评作为提升销量的重要手段&#xff0c;其策略的制定和实施显得尤为重要。特别是对于Shopee和Lazada两大主流平台上的卖家而言&#xff0c;如何有效利用测评策略提升产品销量成为了一大挑战。 自养号测评系统可以批量注册买家账号、模拟真实人工操…

U8二次开发-钉钉集成

钉钉开放平台作为企业沟通和协作的重要工具,其技术的每一次迭代都为企业带来了新的机遇和挑战。随着企业对于高效沟通和智能化管理的需求日益增长,钉钉平台的SDK更新显得尤为重要。把传统的U8与钉钉平台集成,可以有效的将业务功能和角色进行前移,打破应用系统二八原则,即8…

Vue(十二):脚手架配置代理,github案例,插槽

一、脚手架配置代理 老师讲的主要有两种方法&#xff1a; 但是我的没有proxy&#xff0c;只有proxyTable,之前一直不成功&#xff0c;现在我是这样配置的&#xff1a; config文件夹下的index.js: App.vue: 然后就成功了&#xff1a;&#xff08;我真服了&#xff0c;之前在这…

Linux中xz一次恶意后门处理的名场面-尚文网络xUP楠哥

进Q群11372462领取专属报名福利! 说在前面 Linux系统中所使用的xz软件是用于日常文件的归档压缩工具&#xff0c;据悉就在今日&#xff0c;Utils 5.6.0、5.6.1版本存在恶意后门植入漏洞&#xff08;CVE-2024-3094&#xff09;。开发人员在调查SSH性能问题时发现了涉及XZ Util…

Taro多行文本最多展示5行,超出“查看更多”展示,点击弹层

Taro中&#xff0c;页面需求&#xff1a; 多行文本&#xff0c;展示最多展示5行&#xff0c;超出5行&#xff0c;展示“查看更多”按钮&#xff0c;点击弹层展示文本详细信息。 弹层代码就不说了&#xff0c;着重说一下怎么获取区域高度&#xff5e; 1.区域设置max-height&am…