五、回顾查找问题(参见练习 2.1-3),注意到,如果序列 A 已排好序,就可以将该序列的中点与v进行比较。根据比较的结果,原序列中有一半就可以不用再做进一步的考虑了。二分查找算法重复这个过程,每次都将序列剩余部分的规模减半。为二分查找写出迭代或递归的伪代码。证明:二分查找的最坏情况运行时间为 O(lgn)。

文心一言:

二分查找算法的伪代码如下:

function binary_search(A, v):
if A is empty:
return -1
mid = (A.length - 1) / 2
if A[mid] == v:
return mid
else:
left = binary_search(A, A[mid])
if left == -1:
return mid
else:
right = binary_search(A, v)
if right == -1:
return mid - 1
else:
return mid + 1

其中,A 是待查找的有序序列,v 是要查找的元素。在每次迭代中,我们首先检查序列的中点是否等于要查找的元素,如果是,则返回中点的下标。否则,我们将序列剩余部分的规模减半,并递归地查找左半部分和右半部分。如果左半部分的下标小于要查找的元素的下标,则返回左半部分的下标;否则,返回右半部分的下标。

证明:

二分查找的最坏情况运行时间为 O(lgn)。

证明:

二分查找的最坏情况运行时间为 O(lgn)。

证明:

二分查找的最坏情况运行时间为 O(lgn)。


chatgpt:

以下是二分查找的迭代和递归实现的伪代码:

迭代实现:

BINARY-SEARCH(A, v):
low = 1
high = length[A]
while low <= high:
mid = floor((low + high) / 2)
if A[mid] == v:
return mid
else if A[mid] > v:
high = mid - 1
else:
low = mid + 1
return NIL

递归实现:

BINARY-SEARCH(A, v, low, high):
if low > high:
return NIL
mid = floor((low + high) / 2)
if A[mid] == v:
return mid
else if A[mid] > v:
return BINARY-SEARCH(A, v, low, mid - 1)
else:
return BINARY-SEARCH(A, v, mid + 1, high)

证明二分查找的最坏情况运行时间为 O(lgn) 的方法如下:

假设序列 A 有 n 个元素,每次比较后都将序列规模减半,直到找到目标元素或者剩余部分为空。则在最坏情况下,需要进行 k 次比较才能确定目标元素的位置,即剩余部分的规模为 1,此时有

n

/

2

k

=

1

n/2^k = 1

n/2k=1,解得

k

=

log

2

n

k = \log_2 n

k=log2​n。因此,二分查找的最坏情况运行时间为 O(lgn)。

六、注意到2.1节中的过程INSERTION-SORT的第5~7行的 while 循环采用一种线性查找来(反向)扫描已排好序的子数组 A[1…j-1]。我们可以使用二分查找(参见练习2.3-5)来把插人排序的最坏情况总运行时间改进到 O(nlgn)吗?

文心一言:

是的,可以使用二分查找来把插入排序的最坏情况总运行时间改进到 O(nlgn)。

在二分查找中,我们需要检查序列的中点是否等于要查找的元素,如果是,则返回中点的下标。否则,我们将序列剩余部分的规模减半,并递归地查找左半部分和右半部分。如果左半部分的下标小于要查找的元素的下标,则返回左半部分的下标;否则,返回右半部分的下标。

在插入排序中,我们需要将序列的中点与要查找的元素进行比较,如果中点等于要查找的元素,则返回中点的下标。否则,我们将序列剩余部分的规模减半,并递归地查找左半部分和右半部分。如果左半部分的下标小于要查找的元素的下标,则返回左半部分的下标;否则,返回右半部分的下标。

因此,二分查找的最坏情况运行时间为 O(nlgn)。

chatgpt:

是的,我们可以使用二分查找来将插入排序的最坏情况总运行时间改进到 O(nlgn)。

在插入排序算法中,第 i 次循环前,前 i-1 个元素已经排序完成。当处理第 i 个元素时,我们需要在已经排好序的前 i-1 个元素中,找到一个位置 j,使得 A[j]<=A[i]<A[j+1],然后将第 i 个元素插入到 A[j+1] 处。

如果我们使用线性查找的方式,那么在最坏情况下,就需要扫描整个已排好序的子数组 A[1…j-1],因此最坏情况下的比较次数为 1+2+…+(n-1),即 O(n^2)。

但如果我们使用二分查找,在已经排好序的子数组 A[1…j-1] 中查找插入位置,我们只需要每次比较当前元素与子数组中间位置的元素,根据比较结果将查找范围缩小一半,这样就可以将查找的时间复杂度降低到 O(lgn)。因此,使用二分查找的插入排序算法的最坏情况总运行时间为 O(nlgn)。

文心一言 VS chatgpt (8)-- 算法导论2.3 5~6题的更多相关文章

  1. 【个人首测】百度文心一言 VS ChatGPT GPT-4

    昨天我写了一篇文章GPT-4牛是牛,但这几天先别急,文中我测试了用GPT-4回答ChatGPT 3.5 和 Notion AI的问题,大家期待的图片输入也没有出现. 昨天下午百度发布了文心一言,对标C ...

  2. 获取了文心一言的内测及与其ChatGPT、GPT-4 对比结果

    百度在3月16日召开了关于文心一言(知识增强大语言模型)的发布会,但是会上并没现场展示demo.如果要测试的文心一言 也要获取邀请码,才能进行测试的. 我这边通过预约得到了邀请码,大概是在3月17日晚 ...

  3. 阿里版ChatGPT:通义千问pk文心一言

    随着 ChatGPT 热潮卷起来,百度发布了文心一言.Google 发布了 Bard,「阿里云」官方终于也宣布了,旗下的 AI 大模型"通义千问"正式开启测试! 申请地址:http ...

  4. 【对比】文心一言对飚ChatGPT实操对比体验

    前言 缘由 百度[文心一言]体验申请通过 本狗中午干饭时,天降短信,告知可以体验文心一言,苦等一个月的实操终于到来.心中这好奇的对比心理油然而生,到底是老美的[ChatGPT]厉害,还是咱度娘的[文心 ...

  5. 文心一言,通营销之学,成一家之言,百度人工智能AI大数据模型文心一言Python3.10接入

    "文心"取自<文心雕龙>一书的开篇,作者刘勰在书中引述了一个古代典故:春秋时期,鲁国有一位名叫孔文子的大夫,他在学问上非常有造诣,但是他的儿子却不学无术,孔文子非常痛心 ...

  6. 百度生成式AI产品文心一言邀你体验AI创作新奇迹:百度CEO李彦宏详细透露三大产业将会带来机遇(文末附文心一言个人用户体验测试邀请码获取方法,亲测有效)

    目录 中国版ChatGPT上线发布 强大中文理解能力 智能文学创作.商业文案创作 图片.视频智能生成 中国生成式AI三大产业机会 新型云计算公司 行业模型精调公司 应用服务提供商 总结 获取文心一言邀 ...

  7. 【转】最长回文子串的O(n)的Manacher算法

    Manacher算法 首先:大家都知道什么叫回文串吧,这个算法要解决的就是一个字符串中最长的回文子串有多长.这个算法可以在O(n)的时间复杂度内既线性时间复杂度的情况下,求出以每个字符为中心的最长回文 ...

  8. 文心大模型api使用

    文心大模型api使用 首先,我们要获取硅谷社区的连个key 复制两个api备用 获取Access Token 获取access_token示例代码 之后就会输出 作文创作 作文创作:作文创作接口基于文 ...

  9. 文心ERNIE-ViLG,你的免费插图画师

    你是否想拥有一个专属画师,免费为你的优美文字插上几幅优美的插图?如今依然实现 最近AI作画确实很火,在DALL-E和Imagen崭露头角之后,ERNIE-ViLG.Stable-Diffusion(S ...

  10. 【算法导论】--分治策略Strassen算法(运用下标运算)【c++】

    由于偷懒不想用泛型,所以直接用了整型来写了一份 ①首先你得有一个矩阵的class Matrix ②Matrix为了方便用下标进行运算, Matrix的结构如图:(我知道我的字丑...) Matrix. ...

随机推荐

  1. vitrualbox虚拟机搭建

    参考:https://blog.csdn.net/weixin_45115705/article/details/100661644?depth_1-utm_source=distribute.pc_ ...

  2. apt常用命令 - 搬运

    Debian/Ubuntu基础的系统可以使用apt安装.卸载软件包 转自:https://www.jb51.net/os/Ubuntu/56362.html APT 常用命令如下: apt list ...

  3. 初学-javaFX

    使用javaFX做一个简单的音乐播放器 主要功能 1:加载歌曲列表 2:加载歌曲对应歌词 3:歌曲播放进度显示 4:歌词滚动 5:播放  暂停  上一首 下一首 界面如下 组件说明: 1:页面布局 容 ...

  4. rename基本操作

    电脑是Macbook, 用Homebrew先安装rename. 如果没安装Homebrew 直接复制到terminal中回车, 时间稍长. ruby -e "$(curl -fsSL htt ...

  5. classload加载机制

    BootstrapClassLoader.ExtClassLoader.AppClassLoader实际是查阅相应的环境属性sun.boot.class.path.java.ext.dirs和java ...

  6. Centos7.6操作系统安装

    新建虚拟机 默认下一步 稍后安装操作系统 选择对应的操作系统和版本 指定虚拟机名称和存储位置 处理器配置 内存配置:图形化界面至少2G,字符界面至少1G. 网络类型默认为NAT I/O控制器类型默认L ...

  7. ASP.NET Core - 配置系统之自定义配置提供程序

    4. 自定义配置提供程序 在 .NET Core 配置系统中封装一个配置提供程序关键在于提供相应的 IconfigurationSource 实现和 IConfigurationProvider 接口 ...

  8. 记一次生产频繁发生FullGC问题

      问题发现 早上过来,饭都没来的及吃,运维就给我发来信息,说是某个接口调用大量超时.因为最近这个接口调用量是翻倍了,所以我就去检查了下慢SQL,发现确实是有较多的慢SQL,所以我就缩减了查询的时间范 ...

  9. [C++STL教程]7.priority_queue优先队列入门学习!零基础都能听懂的教程

    不知不觉C++STL教程系列已经第7期了.之前我们介绍过:vector, queue, stack, set, map等等数据结构. 今天我们来学习一个新的stl容器:priority_queue优先 ...

  10. 联想拯救者Y9000P 2023版 双系统ubuntu安装nvidia显卡驱动、cuda及cudnn简明教程

    前言 对于从事机器学习.深度学习.图像处理.自然语言处理等科研与工作的小伙伴们,ubuntu系统是一个不错的选择,本人前几天入手拯救者y9000p 2023版本,配置为:RTX4060 16G 13代 ...