五、回顾查找问题(参见练习 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. 转载C#文件下载的实现

    一.//TransmitFile实现下载     protected void Button1_Click(object sender, EventArgs e)    {        /*     ...

  2. c# Visual Studio|There is no editor available for ***,make sure the application for the file type(.vb) is installed问题解决方法

    这个问题出现在在使用VS编码当中,电脑意外关机,导致的文件的缺失或者损坏. 使用反编译软件(如:ILSpy)对编译后的 .EXE文件进行反编译,在翻遍的结果中将相关代码拷贝至目标路径下,替换所需文件. ...

  3. GitHub远程仓库与本地仓库链接问题

    git clone ...时,Failed to connect to 127.0.0.1 port 1080: Connection refused 步骤1------git查看: 查询动态代理 g ...

  4. 截取屏幕 转为GIF 图片

    近期winform 做的一个截取屏幕的软件给大家!谁要留言给我哦! sss

  5. 07-Spring的事务处理

    Spring中提供了七种事务的传播行为: PROPAGATION_REQUIRED:默认值,最常用,统一事务,出现异常,全部回滚 其余参考Spring事务处理word文档. 0.原转账业务(不含事务处 ...

  6. database.property文件

    注意修改用户名密码 mysql8的版本要注意配置时区 此文件放置连接数据库的相关参数 jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://l ...

  7. 学习记录--C++组合+依赖+依赖倒置

    组合关系:表示类之间的关系是整体与部分的关系.即has a / contains a的关系 在面向对象程序设计中,将一个复杂对象分解为简单对象的组合. 在代码中,体现为将一个或多个类的对象作为另一个类 ...

  8. Java笔记第八弹

    设置和获取线程名称 //方法 void setName(String name);//将此线程的名称更改为等于参数name String getName();//返回此线程的名称 public sta ...

  9. 全网最详细中英文ChatGPT-GPT-4示例文档-官网推荐的48种最佳应用场景——从0到1快速入门AI智能问答应用场景(附python/node.js/curl命令源代码,小白也能学)

    目录 Introduce 简介 setting 设置 Prompt 提示 Sample response 回复样本 API request 接口请求 python接口请求示例 node.js接口请求示 ...

  10. [C++STL教程]6.bitset是什么?和bool有什么区别?零基础都能看懂的入门教程

    之前我们介绍过vector, queue, stack,map,set,今天我们介绍另外一个stl容器:bitset. 作者:Eriktse 简介:19岁,211计算机在读,现役ACM银牌选手力争以通 ...