文心一言 VS 讯飞星火 VS chatgpt (18)-- 算法导论4.1 5题
五、使用如下思想为最大子数组问题设计一个非递归的、线性时间的算法。从数组的左边界开始,由左至右处理,记录到目前为止已经处理过的最大子数组。若已知 A[1..j]门的最大子数组,基于如下性质将解扩展为 A[1..j+1]的最大子数组:A[1..j+1]的最大子数组要么是A[1..j]的最大子数组,要么是某个子数组 Ai..j+1。在已知A[1..j]的最大子数组的情况下,可以在线性时间内找出形如 A[i..j+1]的最大子数组。
文心一言:
最大子数组问题是一种经典的算法问题,可以使用非递归的方法来解决。具体来说,我们可以使用一个队列来存储当前已经处理过的最大子数组,并且维护一个变量 max_len 来记录当前最大子数组的长度。同时,我们可以遍历整个数组,记录当前已经处理过的最大子数组的长度,并且在遍历的过程中更新 max_len。
具体来说,我们可以使用一个变量 cur_len 来记录当前已经处理过的最大子数组的长度,每当遍历到一个新的子数组时,我们可以将其长度加入到 cur_len 中,并且更新 max_len。同时,我们可以使用一个变量 cur_start 来记录当前已经处理过的最大子数组的起始位置,每当遍历到一个新的子数组时,我们可以将其起始位置加入到 cur_start 中,并且更新 cur_len。
最后,我们可以返回 cur_start,它是 max_len。这个值就是最大子数组中起始位置最右边的元素的下标,我们可以用它来解决最大子数组问题。
下面是一个使用 Python 实现的非递归的最大子数组问题的算法:
def maxSubArray(nums):
max_len = 0
cur_start = 0
cur_len = 0
queue = []
for i in range(len(nums)):
if cur_len == max_len:
return -1
if nums[i] > nums[cur_start]:
cur_len += nums[i] - nums[cur_start]
cur_start = i
if i > cur_start:
cur_len -= nums[i - cur_start]
cur_start = i
queue.append(cur_start)
cur_start += nums[i]
if cur_len == max_len:
return -1
return queue
这个算法的时间复杂度为 O(n),其中 n 是数组 nums 的长度。


讯飞星火:
算法步骤:
1.初始化最大子数组为整个数组的第一个元素。
2.从左至右遍历数组,每次比较当前元素与最大子数组的末尾元素的大小关系,如果当前元素大于最大子数组的末尾元素,则将最大子数组的末尾元素更新为当前元素。
3.如果遍历到数组的末尾,仍然没有找到比最大子数组更大的末尾元素,则最大子数组就是整个数组。
4.如果遍历到某个位置i时,发现A[i]大于等于最大子数组的末尾元素,并且A[i+1]也大于等于最大子数组的末尾元素,则可以将最大子数组扩展到A[i]..A[j+1],其中j+1即为扩展后的最大子数组的长度。
5.如果遍历完数组后仍未找到可以扩展的最大子数组,则返回最大子数组。
时间复杂度为O(n),空间复杂度为O(1)。

chatgpt:
基于上述性质,可以设计一个非递归的、线性时间的算法来解决最大子数组问题。算法的主要思路如下:
首先初始化两个变量:max_so_far和max_ending_here。它们都初始化为第一个元素。
然后从第二个元素开始遍历整个数组。对于每个元素,更新max_ending_here = max(A[i], max_ending_here + A[i]),表示包含A[i]的最大子数组。同时更新max_so_far,表示到目前位置的最大子数组。
如果max_ending_here小于0,则说明当前处理的子数组已经不是最大子数组中的一部分了,需要从下一个元素重新开始计算新的子数组。
在遍历过程中,记录下max_so_far,即可得到整个数组的最大子数组。
该算法的时间复杂度为O(n),其中n为数组的长度,因为只需要一次遍历数组即可找到最大子数组。而空间复杂度为O(1),因为只需要常数级别的额外空间来存储变量。下面是该算法的Go语言实现示例:
func maxSubArray(nums []int) int {
if len(nums) == 0 {
return 0
}
maxSoFar := nums[0]
maxEndingHere := nums[0]
for i := 1; i < len(nums); i++ {
maxEndingHere = max(nums[i], maxEndingHere+nums[i])
maxSoFar = max(maxSoFar, maxEndingHere)
}
return maxSoFar
}
func max(a, b int) int {
if a > b {
return a
}
return b
}
其中max函数用来比较两个数的大小,返回较大的那个数。

文心一言 VS 讯飞星火 VS chatgpt (18)-- 算法导论4.1 5题的更多相关文章
- 【对比】文心一言对飚ChatGPT实操对比体验
前言 缘由 百度[文心一言]体验申请通过 本狗中午干饭时,天降短信,告知可以体验文心一言,苦等一个月的实操终于到来.心中这好奇的对比心理油然而生,到底是老美的[ChatGPT]厉害,还是咱度娘的[文心 ...
- 【个人首测】百度文心一言 VS ChatGPT GPT-4
昨天我写了一篇文章GPT-4牛是牛,但这几天先别急,文中我测试了用GPT-4回答ChatGPT 3.5 和 Notion AI的问题,大家期待的图片输入也没有出现. 昨天下午百度发布了文心一言,对标C ...
- 文心一言,通营销之学,成一家之言,百度人工智能AI大数据模型文心一言Python3.10接入
"文心"取自<文心雕龙>一书的开篇,作者刘勰在书中引述了一个古代典故:春秋时期,鲁国有一位名叫孔文子的大夫,他在学问上非常有造诣,但是他的儿子却不学无术,孔文子非常痛心 ...
- 获取了文心一言的内测及与其ChatGPT、GPT-4 对比结果
百度在3月16日召开了关于文心一言(知识增强大语言模型)的发布会,但是会上并没现场展示demo.如果要测试的文心一言 也要获取邀请码,才能进行测试的. 我这边通过预约得到了邀请码,大概是在3月17日晚 ...
- 百度生成式AI产品文心一言邀你体验AI创作新奇迹:百度CEO李彦宏详细透露三大产业将会带来机遇(文末附文心一言个人用户体验测试邀请码获取方法,亲测有效)
目录 中国版ChatGPT上线发布 强大中文理解能力 智能文学创作.商业文案创作 图片.视频智能生成 中国生成式AI三大产业机会 新型云计算公司 行业模型精调公司 应用服务提供商 总结 获取文心一言邀 ...
- 阿里版ChatGPT:通义千问pk文心一言
随着 ChatGPT 热潮卷起来,百度发布了文心一言.Google 发布了 Bard,「阿里云」官方终于也宣布了,旗下的 AI 大模型"通义千问"正式开启测试! 申请地址:http ...
- 基于讯飞语音API应用开发之——离线词典构建
最近实习在做一个跟语音相关的项目,就在度娘上搜索了很多关于语音的API,顺藤摸瓜找到了科大讯飞,虽然度娘自家也有语音识别.语义理解这块,但感觉应该不是很好用,毕竟之前用过百度地图的API,有问题也找不 ...
- android用讯飞实现TTS语音合成 实现中文版
Android系统从1.6版本开始就支持TTS(Text-To-Speech),即语音合成.但是android系统默认的TTS引擎:Pic TTS不支持中文.所以我们得安装自己的TTS引擎和语音包. ...
- android讯飞语音开发常遇到的问题
场景:android项目中共使用了3个语音组件:在线语音听写.离线语音合成.离线语音识别 11208:遇到这个错误,授权应用失败,先检查装机量(3台测试权限),以及appid的申请时间(35天期限), ...
- 初探机器学习之使用讯飞TTS服务实现在线语音合成
最近在调研使用各个云平台提供的AI服务,有个语音合成的需求因此就使用了一下科大讯飞的TTS服务,也用.NET Core写了一个小示例,下面就是这个小示例及其相关背景知识的介绍. 一.什么是语音合成(T ...
随机推荐
- 前端三件套系例之BootStrap——BootStrap基础、 BootStrap布局
文章目录 1 BootStrap基础 1 什么是BootStrap 2 BootStrap的版本 3 BootStrap 下载 4 CDN服务 5 目录结构 6 基本模板 7 浏览器支持 8 浏览器兼 ...
- a-2b
a-2b 描述 输入两个高精度数a和b,求a-2b的值. 输入 输入两行,第一行是被减数a,第二行是减数b(a>2b并且a,2b的位数不同且不存在借位,且b+b不存在进位). 输出 一行,即 ...
- 文心一言 VS 讯飞星火 VS chatgpt (112)-- 算法导论10.2 3题
三.用go语言,用一个单链表L实现一个队列.要求操作 ENQUEUE 和 DEQUEUE 的运行时间仍为O(1). 文心一言: 在 Go 语言中,使用单链表实现队列的操作,包括入队(ENQUEUE)和 ...
- 14.11 Socket 基于时间加密通信
在之前的代码中我们并没有对套接字进行加密,在未加密状态下我们所有的通信内容都是明文传输的,这种方式在学习时可以使用但在真正的开发环境中必须要对数据包进行加密,此处笔者将演示一种基于时间的加密方法,该加 ...
- VS Code C# 开发工具包正式发布
前言 微软于本月正式发布Visual Studio Code C#开发工具包,此前该开发套件已经以预览版的形式在6月份问世.经过4个月的测试和调整,微软修复了350多个问题,其中大部分是用户反馈导致的 ...
- CF85B [Embassy Queue]
Problem 题目简述 有 \(n\) 个人分别在 \(c_i\) 的时刻来,他们都要在 \(k_1\),\(k_2\) 和 \(k_3\) 窗口干不同的事,当有后面一人也排在在同一窗口时,必须等待 ...
- [C++]vector的基本的用法
[vector/容器/向量/动态数组]的基本的用法 容器的定义 向量/容器(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container). 跟任意其它类型容器一样,它能够存 ...
- 又拍云+PicGo搭建图床教程
具体搭建方法 https://blog.csdn.net/qq_41684621/article/details/114068076 这里有个细节 注意这里一定要加上 http:// 否则在自动生成 ...
- 在路上---学习篇(一)Python 数据结构和算法 (6)基于GA(遗传)算法的小案例
独白 最近了解到一种算法叫遗传算法,对其比较感兴趣,研究了一下,是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法.遗传算法是从代表问题可 ...
- uni-app学习笔记——路由与页面跳转
小颖最近在学习小程序,怕自己前看后忘,毕竟还没开始进入项目实践中,就自己瞎倒腾嘻嘻,今天来看下 uni-app 的路由与页面跳转,小颖就简单列举下它们的用法,具体的大家可以看官网哦!啦啦啦啦啦 ...