文心一言 VS chatgpt (6)-- 算法导论2.3 1~2题
一、使用图 2-4作为模型,说明归并排序在数组 A=(3,41,52,26,38,57,9,49)上的操作。
文心一言:
使用图 2-4作为模型,说明归并排序在数组 A=(3,41,52,26,38,57,9,49) 上的操作。
归并排序是一种基于分治思想的排序算法,它的基本思想是将一个大的数组分成两个小的数组,然后对这两个小的数组分别进行排序,最后将排好序的两个小的数组合并成一个大的数组。
具体来说,归并排序的操作步骤如下:
1.将数组 A 分成两个子数组 A_1 和 A_2,其中 A_1 的长度为 1,A_2 的长度为 A_1 的长度加上 1。
2.对 A_1 和 A_2 分别进行排序,可以使用任何一种排序算法,例如冒泡排序、选择排序、插入排序等。
3.将排好序的 A_1 和 A_2 合并成一个新的数组 A_3,其中 A_3 的长度为 A_1 和 A_2 的长度之和。
4.重复步骤 1 到步骤 3,直到数组 A 中只剩下一个元素为止。
下面是使用 Python 实现归并排序的代码:
def merge_sort(A):
if len(A) <= 1:
return A
mid = len(A) // 2
left_A = A[:mid]
right_A = A[mid:]
left_sorted = merge_sort(left_A)
right_sorted = merge_sort(right_A)
return merge(left_sorted, right_sorted)
def merge(left_A, right_A):
result = []
i, j = 0, 0
while i < len(left_A) and j < len(right_A):
if left_A[i] < right_A[j]:
result.append(left_A[i])
i += 1
else:
result.append(right_A[j])
j += 1
result += left_A[i:]
result += right_A[j:]
return result
在这个实现中,我们首先判断数组 A 的长度是否小于等于 1,如果是,则直接返回 A。否则,我们将数组 A 分成两个子数组 A_1 和 A_2,其中 A_1 的长度为 1,A_2 的长度为 A_1 的长度加上 1。然后,我们对 A_1 和 A_2 分别进行排序,并将排好序的 A_1 和 A_2 合并成一个新的数组 A_3,其中 A_3 的长度为 A_1 和 A_2 的长度之和。最后,我们重复步骤 1 到步骤 3,直到数组 A 中只剩下一个元素为止。
在这个实现中,我们使用了 Python 的内置函数 merge 来合并两个已排序的数组。merge 函数的实现方式与 merge_sort 函数类似,只是它将两个已排序的数组作为参数传递给 merge 函数,并返回合并后的结果。



chatgpt:
对于给定的数组 A=(3, 41, 52, 26, 38, 57, 9, 49),归并排序的操作步骤如下:
将数组从中间位置分成两个子数组,左边为 L=(3, 41, 52, 26),右边为 R=(38, 57, 9, 49)。
递归地对左半部分 L 进行归并排序,将 L 分成两个子数组,左边为 L1=(3, 41),右边为 L2=(52, 26)。对 L1 和 L2 分别进行归并排序,得到有序数组 L1’=(3, 41) 和 L2’=(26, 52)。
递归地对右半部分 R 进行归并排序,将 R 分成两个子数组,左边为 R1=(38, 57),右边为 R2=(9, 49)。对 R1 和 R2 分别进行归并排序,得到有序数组 R1’=(38, 57) 和 R2’=(9, 49)。
合并 L1’ 和 L2’,得到数组 L’=(3, 26, 41, 52)。
合并 R1’ 和 R2’,得到数组 R’=(9, 38, 49, 57)。
将 L’ 和 R’ 合并成一个有序数组 S,即将 L’ 和 R’ 中的元素按照从小到大的顺序依次取出,放入 S 中。得到最终的有序数组 S=(3, 9, 26, 38, 41, 49, 52, 57)。
归并排序的主要思想是将一个大问题分解成若干个小问题,并对每个小问题进行递归求解,然后将每个小问题的解合并起来得到大问题的解。在上述示例中,将数组 A 分成 L 和 R 两个子数组,分别对它们进行递归排序,最后将它们的有序结果合并起来得到了数组 A 的有序结果。这种思想使得归并排序算法具有较好的稳定性和时间复杂度 O(nlogn) 的优秀表现。

二、重写过程 MERGE,使之不使用哨兵,而是一旦数组L或R 的所有元素均被复制回A就立刻停止,然后把另一个数组的剩余部分复制回 A。
文心一言:
以下是一个使用 Python 实现的 MERGE 过程,它不使用哨兵,而是在数组 L 或 R 的所有元素均被复制回 A 时立即停止,然后将另一个数组的剩余部分复制回 A。
def merge(L, R):
if len(L) == 0 or len(R) == 0:
return A
# 创建哨兵
L_sentinel = L[0]
R_sentinel = R[0]
# 将哨兵复制回 A
A = [L_sentinel] + L + [R_sentinel] + R
# 如果 L 或 R 的所有元素均被复制回 A,则停止
while len(L) > 0 or len(R) > 0:
if L[0] == L_sentinel:
L = L[1:]
elif R[0] == R_sentinel:
R = R[1:]
else:
L = L[1:]
R = R[1:]
# 将 L 或 R 的剩余部分复制回 A
A = [L[0]] + L + [R[0]] + R
return A
在这个实现中,我们首先检查数组 L 或 R 是否为空,如果是,则直接返回 A。否则,我们创建哨兵 L_sentinel 和 R_sentinel,并将它们复制回 A。然后,我们检查 L 或 R 是否已经被完全复制回 A,如果是,则停止。否则,我们使用两个指针 i 和 j 分别指向 L 和 R 的开头,比较它们的第一个元素,将较小的元素复制回 A,并将指针 i 向后移动一位。如果 L 或 R 的所有元素均被复制回 A,则停止。最后,我们将 L 或 R 的剩余部分复制回 A,并返回 A。



chatgpt:
以下是重写过程MERGE的示例代码,不使用哨兵,当L或R数组所有元素均被复制回A时会立即停止:
def merge(A, p, q, r):
n1 = q - p + 1 # 左子数组长度
n2 = r - q # 右子数组长度
L = A[p:p+n1] # 复制左子数组到L中
R = A[q+1:q+n2+1] # 复制右子数组到R中
i, j = 0, 0 # 初始化索引值
k = p # k表示待填入A的位置,初始值为p
while i < n1 and j < n2: # 当L和R都还有元素未比较时
if L[i] <= R[j]:
A[k] = L[i] # 将较小的L[i]复制回A中
i += 1 # 更新L的索引值
else:
A[k] = R[j] # 将较小的R[j]复制回A中
j += 1 # 更新R的索引值
k += 1 #更新k的值
# 处理剩余部分
while i < n1:
A[k] = L[i] # 将L中剩余元素复制回A中
i += 1
k += 1
while j < n2:
A[k] = R[j] # 将R中剩余元素复制回A中
j += 1
k += 1
在这个重写版本的MERGE算法中,我们不再使用哨兵元素,而是使用两个while循环来处理L和R数组剩余的元素。在每一次比较后,如果L[i] <= R[j],则将L[i]复制回A[k],并更新i和k的值;否则,将R[j]复制回A[k],并更新j和k的值。当其中一个数组所有元素都被复制回A时,立即退出while循环,并将另一个数组的剩余部分复制到A中。
该算法的时间复杂度为O(n),与使用哨兵的版本相同,但这个算法需要额外的空间来复制L和R数组,空间复杂度为O(n)。

文心一言 VS chatgpt (6)-- 算法导论2.3 1~2题的更多相关文章
- 【个人首测】百度文心一言 VS ChatGPT GPT-4
昨天我写了一篇文章GPT-4牛是牛,但这几天先别急,文中我测试了用GPT-4回答ChatGPT 3.5 和 Notion AI的问题,大家期待的图片输入也没有出现. 昨天下午百度发布了文心一言,对标C ...
- 获取了文心一言的内测及与其ChatGPT、GPT-4 对比结果
百度在3月16日召开了关于文心一言(知识增强大语言模型)的发布会,但是会上并没现场展示demo.如果要测试的文心一言 也要获取邀请码,才能进行测试的. 我这边通过预约得到了邀请码,大概是在3月17日晚 ...
- 阿里版ChatGPT:通义千问pk文心一言
随着 ChatGPT 热潮卷起来,百度发布了文心一言.Google 发布了 Bard,「阿里云」官方终于也宣布了,旗下的 AI 大模型"通义千问"正式开启测试! 申请地址:http ...
- 【对比】文心一言对飚ChatGPT实操对比体验
前言 缘由 百度[文心一言]体验申请通过 本狗中午干饭时,天降短信,告知可以体验文心一言,苦等一个月的实操终于到来.心中这好奇的对比心理油然而生,到底是老美的[ChatGPT]厉害,还是咱度娘的[文心 ...
- 文心一言,通营销之学,成一家之言,百度人工智能AI大数据模型文心一言Python3.10接入
"文心"取自<文心雕龙>一书的开篇,作者刘勰在书中引述了一个古代典故:春秋时期,鲁国有一位名叫孔文子的大夫,他在学问上非常有造诣,但是他的儿子却不学无术,孔文子非常痛心 ...
- 百度生成式AI产品文心一言邀你体验AI创作新奇迹:百度CEO李彦宏详细透露三大产业将会带来机遇(文末附文心一言个人用户体验测试邀请码获取方法,亲测有效)
目录 中国版ChatGPT上线发布 强大中文理解能力 智能文学创作.商业文案创作 图片.视频智能生成 中国生成式AI三大产业机会 新型云计算公司 行业模型精调公司 应用服务提供商 总结 获取文心一言邀 ...
- 【转】最长回文子串的O(n)的Manacher算法
Manacher算法 首先:大家都知道什么叫回文串吧,这个算法要解决的就是一个字符串中最长的回文子串有多长.这个算法可以在O(n)的时间复杂度内既线性时间复杂度的情况下,求出以每个字符为中心的最长回文 ...
- 文心大模型api使用
文心大模型api使用 首先,我们要获取硅谷社区的连个key 复制两个api备用 获取Access Token 获取access_token示例代码 之后就会输出 作文创作 作文创作:作文创作接口基于文 ...
- 文心ERNIE-ViLG,你的免费插图画师
你是否想拥有一个专属画师,免费为你的优美文字插上几幅优美的插图?如今依然实现 最近AI作画确实很火,在DALL-E和Imagen崭露头角之后,ERNIE-ViLG.Stable-Diffusion(S ...
- 【算法导论】--分治策略Strassen算法(运用下标运算)【c++】
由于偷懒不想用泛型,所以直接用了整型来写了一份 ①首先你得有一个矩阵的class Matrix ②Matrix为了方便用下标进行运算, Matrix的结构如图:(我知道我的字丑...) Matrix. ...
随机推荐
- Promise和await、同步和异步
1.同步和异步是什么: ①同步:同步是指如果一个进程在执行某个请求的时候,如果该请求需要等待一段时间,那么该进程会一直等待下去,直到收到返回信息才继续执行下去 ②异步: 指一个请求在执行某个请 ...
- HAL层分析
1. 安卓HAL模块基本 2. 定义hal层代码的5个特性 1)硬件抽象层具有与硬件的密切相关性. 2) 硬件抽象层具有与操作系统无关性. 3) 接口定义的功能应该包含硬件或者系统所需硬件支持的所有功 ...
- c++方便的输出vector和map_重载的应用 【python一样写c++、二】
写程序,尤其是调试的时候,会想着直接输出一个map或者vector来调错. 但本来的cout<<没有这种功能.我们就会想了,要是c++能和python一样,直接输出一个列表(vector) ...
- Go内存管理逃逸分析
1. 前言 所谓的逃逸分析(Escape analysis)是指由编译器决定内存分配的位置吗不需要程序员指定. 函数中申请一个新的对象 如果分配在栈中, 则函数执行结束后可自动将内存回收 如果分配在堆 ...
- Salesforce LWC学习(十二) Dependence Picklist实现
本篇可参看: Salesforce LWC学习(六) @salesforce & lightning/ui*Api Reference salesforce零基础学习(八十七)Apex 中Pi ...
- [CTF]Caser-Pass-Tool1-C++工具
刷pico遇到一个凯撒密码加密题,顺手写了个解密工具,但是暂时没有解决到边界字母的升降档问题 #include<iostream> using namespace std; int mai ...
- SQL Server修改sa用户密码
SQL Server数据库使用windows用户登录,安全性->登录名->找到sa用户->属性: 可直接修改sa用户密码(可去掉勾选强制实施密码策略)
- 3D开发工具HOOPS最新解析合集!助力实现web端高性能模型渲染!
一.3D技术为创新提供强大助力(1)3D专家提供专属技术支持服务不管您想搭建桌面.WEB或者移动端APP应用,技术领先全球的HOOPS Platform组件都可以为您提供弹性的3D集成架构,同时,一批 ...
- 【c#表达式树】最完善的表达式树Expression.Dynamic的玩法
引言 在我第一次写博客的时候,写的第一篇文章,就是关于表达式树的,链接:https://www.cnblogs.com/1996-Chinese-Chen/p/14987967.html,其中,当时一 ...
- 带你揭开神秘的javascript AST面纱之AST 基础与功能
作者:京东科技 周明亮 AST 基础与功能 在前端里面有一个很重要的概念,也是最原子化的内容,就是 AST ,几乎所有的框架,都是基于 AST 进行改造运行,比如:React / Vue /Taro ...