文心一言 VS 讯飞星火 VS chatgpt (18)-- 算法导论4.1 5题

Posted 福大大架构师每日一题

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文心一言 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:

基于上述性质,可以设计一个非递归的、线性时间的算法来解决最大子数组问题。算法的主要思路如下:

  1. 首先初始化两个变量:max_so_far和max_ending_here。它们都初始化为第一个元素。

  2. 然后从第二个元素开始遍历整个数组。对于每个元素,更新max_ending_here = max(A[i], max_ending_here + A[i]),表示包含A[i]的最大子数组。同时更新max_so_far,表示到目前位置的最大子数组。

  3. 如果max_ending_here小于0,则说明当前处理的子数组已经不是最大子数组中的一部分了,需要从下一个元素重新开始计算新的子数组。

  4. 在遍历过程中,记录下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 ChatGPT GPT-4

昨天我写了一篇文章GPT-4牛是牛,但这几天先别急,文中我测试了用GPT-4回答ChatGPT 3.5 和 Notion AI的问题,大家期待的图片输入也没有出现。

昨天下午百度发布了文心一言,对标ChatGPT,录屏+无实机演示让百度股价暴跌。但是晚上百度就开放了个人的体验申请

https://yiyan.baidu.com/welcome

朋友圈有好兄弟申请通过了,帮忙问了几个问题,我把百度文心一言的回答和GPT-4的回答一并贴上。

数学问题:三分之一加五分之一等于多少?

文心一言:

GPT-4:
为了计算这个分数相加的问题,我们需要找到它们的最小公倍数,然后将它们转换为相同的分母。

三分之一加五分之一:1/3 + 1/5

首先找到最小公倍数,这里是15。然后将两个分数转换为相同的分母:(1/3) * (5/5) = 5/15 (1/5) * (3/3) = 3/15

现在我们可以将这两个分数相加:5/15 + 3/15 = 8/15

所以,三分之一加五分之一等于8/15。

开放问题:前段时间AI绘画比较火热,比如DALL-E、Midjourney、Stable Diffusion等,很多人担心画师、设计师等会呗取代,你觉得呢?

文心一言:
从就业市场的角度来看,AI技术的发展对于设计行业可能有一定的影响。但是,这并不意味着画师和设计师会被取代,因为新的技术和工具正在不断涌现,使得设计师们有更多机会通过创意、数字化技术等方式来提高他们的工作效率和质量。此外,设计师还需要不断地学习新的知识和技能,以应对不断变化的市场和消费者需求。
因此,尽管AI绘画技术可能在某些方面会带来挑战,但设计师们仍然会继续在自己的领域中发挥重要作用。而且,随着技术的不断进步和更新,我们也可以期待更加智能、高效和个性化的设计解决方案出现,使得设计行业的未来充满无限可能。

GPT-4:
虽然近年来AI绘画技术取得了很多进展,诸如DALL-E、Midjourney和Stable Diffusion等项目已经展示了它们在创作领域的潜力,但这并不意味着传统的画师和设计师会被完全取代。AI工具和人类创作者之间的关系可以看作是互补的,而非竞争的。

以下是一些原因为什么AI不太可能完全取代画师和设计师:

独特的审美和风格:每位艺术家都有自己独特的审美观和艺术风格。尽管AI可以学习和模仿这些风格,但它很难替代真正的个人风格和原创性。

创意过程:艺术创作不仅仅是技巧的体现,还包括情感、观念和寓意等元素。AI目前还不能理解或表达这些复杂的人类情感和观念。

人际互动:艺术家和设计师与客户、观众和其他创作者进行沟通和合作,以满足特定需求或实现共同目标。AI在理解和处理这种人际互动方面的能力相对有限。

技术局限:虽然AI在绘画领域取得了显著的进步,但它仍然受到技术局限,例如在某些情况下可能产生无法预测的结果。

因此,AI绘画技术可以被视为一种强大的辅助工具,帮助画师和设计师提高生产效率,实现新的创意和视觉效果。它们可以相互激发和推动彼此的发展,而不是取代人类的创造力。

代码能力:线性回归模型基于统计学的实现,请给出python代码,并使用Markdown格式

文心一言:

import numpy as np  
 
from statsmodels.tsa.model import LinearRegression  
 
# 构建线性回归模型  
 
model = LinearRegression()  
 
# 定义训练数据  
 
X = np.array([-1.0, 1.0, 2.0, 3.0])  
 
y = np.array([1.0, 0.0, -1.0, 0.0])  
 
# 定义模型  
 
model.fit(X, y)  
 
# 输出模型估计值  
 
print(model.summary())  
 
# 绘制模型曲线  
 
line = model.predict(X)  
 
plt.plot(line)  
 
plt.show()

GPT-4:

机器学习问题:介绍一下机器学习中的线性回归模式原理,数学推导过程请用Markdown格式

文心一言:

GPT-4:

大家感受一下,文心一言到底能不能打?作为全村的希望,大家是不是增加了一点信心。

4个工具,让 ChatGPT 如虎添翼!

ChatGPT 系列研究报告(40个PDF)

可能是全网最全的速查表:Python Numpy Pandas Matplotlib 机器学习 ChatGPT

以上是关于文心一言 VS 讯飞星火 VS chatgpt (18)-- 算法导论4.1 5题的主要内容,如果未能解决你的问题,请参考以下文章

文心一言 VS 讯飞星火 VS chatgpt (28)-- 算法导论5.1 3题

文心一言 VS 讯飞星火 VS chatgpt (25)-- 算法导论4.2 7题

文心一言 VS 讯飞星火 VS chatgpt (18)-- 算法导论4.1 5题

文心一言 VS 讯飞星火 VS chatgpt (19)-- go语言的slice和rust语言的Vec的扩容流程是什么?

个人首测百度文心一言 VS ChatGPT GPT-4

文心一言 VS ChatGPT,国产大模型和国外的差距有多大?