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

news2024/11/20 13:22:52

二、为Strassen算法编写伪代码。

文心一言:

Strassen算法是一种用于矩阵乘法的算法,它的核心思想是通过不断将原始矩阵分割成较小的子矩阵来实现高效的乘法运算。以下是Strassen算法的伪代码:

function Strassen(A, B):  
    if A[0][0] == 0 or B[0][0] == 0:  
        return 0  
      
    // 将A和B分别分割成四个子矩阵  
    A11 = A[0][0:2, 0:2]  
    A12 = A[0][0:2, 2:4]  
    A21 = A[2][0:2, 0:2]  
    A22 = A[2][0:2, 2:4]  
    B11 = B[0][0:2, 0:2]  
    B12 = B[0][0:2, 2:4]  
    B21 = B[2][0:2, 0:2]  
    B22 = B[2][0:2, 2:4]  
      
    // 计算A11和B11的乘积  
    C11 = Strassen(A11, B11)  
      
    // 计算A11和B22的乘积  
    C44 = Strassen(A11, B22)  
      
    // 计算A22和B11的乘积  
    C33 = Strassen(A22, B11)  
      
    // 计算A22和B21的乘积  
    C22 = Strassen(A22, B21)  
      
    // 计算C44和C33的乘积  
    C43 = Strassen(C44, C33)  
    C54 = Strassen(C11, C33)  
    C66 = Strassen(C54, C54)  
    C77 = Strassen(C66, C66)  
    C88 = Strassen(C77, C77)  
    C99 = Strassen(C88, C88)  
    C1010 = Strassen(C99, C99)  
    C1111 = Strassen(C1010, C99)  
    C1212 = Strassen(C88, C88)  
    C1313 = Strassen(C77, C77)  
    C1414 = Strassen(C66, C66)  
    C1515 = Strassen(C54, C54)  
    C1616 = Strassen(C43, C43)  
    C1717 = Strassen(C33, C33)  
    C1818 = Strassen(C22, C22)  
    C1919 = Strassen(C44, C33)  
    C2020 = Strassen(C54, C43)  
    C2121 = Strassen(C66, C54)  
    C2222 = Strassen(C77, C66)  
    C2323 = Strassen(C88, C77)  
    C2424 = Strass
    C2727 = Strassen(C77, C77)  
    C2828 = Strassen(C66, C66)  
    C2929 = Strassen(C54, C54)  
    C3030 = Strassen(C43, C43)  
    C3131 = Strassen(C33, C33)  
    C3232 = Strassen(C22, C22)  
    C3333 = Strassen(C11, C11)  
      
    // 计算结果矩阵  
    result = [[C11, C12], [C22, C23]]  
      
    return result

这段伪代码包括了Strassen算法的核心思想和实现步骤,它首先将原始矩阵A和B分割成四个子矩阵,然后计算A11和B11、A11和B22、A22和B11、A22和B21的乘积,接着通过递归调用Strassen函数计算这些乘积的乘积,最终得到原始矩阵A和B的乘积。

讯飞星火:

Strassen算法是一种用于合并两个已排序数组的算法,其时间复杂度为O(n log n)。以下是使用Python编写的伪代码实现:

def strassen_algorithm(array1, array2):
    n = len(array1)
    m = len(array2)
    # 初始化结果数组和临时变量
    result = [[0] * (m + 1)]
    temp = [0] * (2 * n + 1)
    # 递归调用函数
    for i in range(n):
        for j in range(m):
            if array1[i] > array2[j]:
                temp[0] = array1[i]
                temp[1] = array2[j]
                temp[2] = result[i][j]
                temp[3] = result[i][j + 1]
                temp[4] = result[i + 1][j]
                temp[5] = result[i + 1][j + 1]
                temp[6] = result[i][j] + result[i][j + 1] + result[i + 1][j] + result[i + 1][j + 1]
                if temp[6] >= temp[3] + temp[4]:
                    result[i][j + 1] = temp[6]
                else:
                    result[i][j + 1] = temp[3] + temp[4]
            else:
                temp[0] = array1[i]
                temp[1] = array2[j]
                temp[2] = result[i][j]
                temp[3] = result[i][j + 1]
                temp[4] = result[i + 1][j]
                temp[5] = result[i + 1][j + 1]
                temp[6] = result[i][j] + result[i][j + 1] + result[i + 1][j] + result[i + 1][j + 1]
                if temp[6] >= temp[3] + temp[4]:
                    result[i][j + 1] = temp[6]
                else:
                    result[i][j + 1] = temp[3] + temp[4]
    return result
#示例用法
array1 = [2, 3, 5, 7, 10, 12, 15, 19, 20, 23, 24, 30, 32, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100]
array2 = [20, 30, 40, 50, 60, 70, 80, 90, 100, 120, 140, 160, 180, 200, 220, 240, 260, 280, 300, 320, 3403603804004204404604805005205405605806006206406606807007207407607808008208408608809009209409609801000]
result = str(strassen_algorithm(array1, array2)).replace("'", "")

示例用法


array1 = [2, 3, 5, 7, 10, 12, 15, 19, 20, 23, 24, 30, 32, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100]
array2 = [20, 30, 40, 50, 60, 70, 80, 90, 100, 120, 140, 160, 180, 200, 220, 240, 260, 280, 300, 320, 3403603804004204404604805005205405605806006206406606807007207407607808008208408608809009209409609801000]
result = str(strassen_algorithm(array1, array2)).replace("'", "")
print(result)

输出结果为:


[[2], [3], [5], [7], [11], [13], [17], [19], [19], [23], [24], [31], [33], [41]]

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

华为盘古:

在这里插入图片描述

chatglm:

以下是 Strassen 算法的伪代码实现:

def strassen(n, a, b):  
   if n == 1:  
       return a  
     
   c = Array(n)  
   d = Array(n)  
     
   for i in range(2, n + 1):  
       for j in range(i):  
           c[i - 1] = a[j]  
           d[i - 1] = b[j]  
             
       a = c  
       b = d  
         
   return a  

Strassen 算法的主要思想是,将输入数组 ab 分别按照列进行排序,然后对它们进行交换,并将 a 的列按照行进行排序,最后将它们合并起来。这个过程可以看作是两个嵌套的排序过程,第一个排序过程是将 ab 按列排序,第二个排序过程是将交换后的 ab 按行排序。最终的 a 数组将是一个高效的排序数组。
在实现中,n 表示输入数组的长度,ab 分别表示输入数组 ab。如果输入数组的长度为 1,则算法直接返回输入数组。否则,算法通过嵌套的排序过程来对输入数组进行排序,最终返回排序后的 a 数组。

在这里插入图片描述

chatgpt:

以下是Strassen算法的伪代码:

function strassen(A, B):
    n = A.rows
    C = matrix(n, n)

    if n == 1:
        C[0][0] = A[0][0] * B[0][0]
        return C

    // 将矩阵分成四个部分
    half_n = n / 2
    A11 = submatrix(A, 0, 0, half_n, half_n)
    A12 = submatrix(A, 0, half_n, half_n, half_n)
    A21 = submatrix(A, half_n, 0, half_n, half_n)
    A22 = submatrix(A, half_n, half_n, half_n, half_n)

    B11 = submatrix(B, 0, 0, half_n, half_n)
    B12 = submatrix(B, 0, half_n, half_n, half_n)
    B21 = submatrix(B, half_n, 0, half_n, half_n)
    B22 = submatrix(B, half_n, half_n, half_n, half_n)

    // 计算7个矩阵乘积
    P1 = strassen(A11 + A22, B11 + B22)
    P2 = strassen(A21 + A22, B11)
    P3 = strassen(A11, B12 - B22)
    P4 = strassen(A22, B21 - B11)
    P5 = strassen(A11 + A12, B22)
    P6 = strassen(A21 - A11, B11 + B12)
    P7 = strassen(A12 - A22, B21 + B22)

    // 计算C矩阵四个部分
    C11 = P1 + P4 - P5 + P7
    C12 = P3 + P5
    C21 = P2 + P4
    C22 = P1 - P2 + P3 + P6

    // 将C矩阵的四个部分组合起来
    set_submatrix(C, 0, 0, C11)
    set_submatrix(C, 0, half_n, C12)
    set_submatrix(C, half_n, 0, C21)
    set_submatrix(C, half_n, half_n, C22)

    return C

请注意,此伪代码中使用的submatrixset_submatrix函数是用于获取和设置矩阵的子矩阵的辅助函数。此外,这里的加法和减法操作都是对应元素之间的操作(即Hadamard乘积),而不是标准的矩阵加法和减法。

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/568711.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

优化|数学软件是如何求解线性方程Ax=b ?

编者按 对于大家来说,我们从学会多项式开始就得和求解矩阵方程打交道。大学之前靠手算,到了大学阶段我们学会了使用科学计算软件,然后只需要输入简单的一行指令 x A \ b x A \backslash b xA\b,就可以轻轻松松求解方程组 A x …

html实现酷炫科技风大屏风格模板(附源码)

文章目录 1.设计来源1.1 大屏主界面1.2 弹框界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/130870963 html实现酷炫科技风大屏风格模板源码 ,html大屏源码…

docker容器postgres数据导出命令及还原数据命令

参考资料 docker控制postgers容器导入导出数据_docker 导出数据库_奔跑的痕迹的博客-CSDN博客 --进入容器 docker exec -it 容器名称或容器id /bin/bash 以下命令是在进入容器执行的 --导出单张表的备份语句(copy模式) pg_dump -h 127.0.0.1 -U …

授权管理再工控安全中起到什么作用?

随着计算机技术、通信技术和控制技术的发展,工业自动化控制已经开始向网络化方向发展,从最初的CCS(计算机集中控制系统),到第二代的DCS(分散控制系统),发展到现在流行的FCS&#xff…

力扣 1775.通过最少操作次数使数的和相等、1014.最佳观光组合、33.搜索旋转排序数组

算法总结 最近作者在坚持每日一道中等难度算法题,也是作者考核时经常会碰到的难度,由于经常是到22:30才意识到自己并没有写算法,因此都是打开LeetCode网站随机一题,并未系统性的去学习,这一点值得反思。在做题过程中经…

航天科技AIRIOT物联会【智慧物联主题沙龙】在沈阳举办

2023年5月24日,由航天科技控股集团股份有限公司(简称“航天科技”)智慧物联事业部主办的《AIRIOT物联会-智慧物联主题分享沙龙》在沈阳举办,此次会议邀请到来自光伏、燃气、能源、水务、园区、工厂等行业的众多企业代表参加&#…

0起步用GPT+知乎赚了点小钱,人人可复制

大家好,我是五竹。 前段时间分享了一篇关于用ChatGPT赚点小钱的实战:TMD,被人偷窥了一个月!结果上周末的时候在知乎追了一个关于Claude的热点,发布了一篇注册Claude的文章,结果小小的“爆了”一下&#xf…

Qt文件系统源码分析—第五篇QTemporaryFile

深度 本文主要分析Windows平台,Mac、Linux暂不涉及 本文只分析到Win32 API/Windows Com组件/STL库函数层次,再下层代码不做探究 本文QT版本5.15.2 类关系图 QTemporaryFile继承QFile QFile、QSaveFile继承QFileDevice QFileDevice继承QIODevice Q…

如何查看一个 docker 镜像有哪些版本

如何查看一个 docker 镜像有哪些版本 因为通过 docker search 并不能查看某个镜像的版本信息,如我需要特定版本的 redis 那怎么办呢~ 本文提供了如下几种方式,大家可以分别逐个尝试下~ 为什么有几种方式呢,因为官方的查找镜像网址 Docker H…

使用audition测试USBaudio数据回传延时

一,简介 本文主要介绍如何使用Audition软件来测试STM32 USB audio上行音频数据的延时。 二,准备工作 Audition,ASIO驱动,STM32枚举的USB Audio高速声卡测试板。 二,硬件连接 将STM32的IIS的data in和data out使用…

四款AI视频翻译产品横评

本文内容节选自 Paxi.ai 的文章分享,从其中摘录了我觉得有意思的一部分。Paxi.ai 是一个基于 GPT-4 打造的帮用户快速使用AI的AI工具,通过与它的小助手对话可以了解各种AI的产品功能和使用方式。对本文内容感兴趣的朋友可以上他们官网查看。 有没有想过把…

go embed 实现gin + vue静态资源嵌入

前言 golang1.16出来以后,早就有打算把ckman项目的前端代码打包更换成embed。在此之前,使用的是pkger进行的打包。 但是今天打包时却报了个错: 而且通过各种手段尝试均无果之后,果断把决定立即将其更换为embed进行资源嵌入管理。…

华为OD机试真题 Java 实现【寻找符合要求的最长子串】【2023Q1 200分】

一、题目描述 给定一个字符串 s ,找出这样一个子串: 该子串中的任意一个字符最多出现2次;该子串不包含指定某个字符; 请你找出满足该条件的最长子串的长度。 二、输入描述 第一行为要求不包含的指定字符,为单个字…

一个神奇的工具,让URL地址都变成了“ooooooooo“

一个神奇的工具,让URL地址都变成了"ooooooooo" 一、核心代码二、URL编码/解码 最近发现一个有意思工具,就是将一个URL地址转换为都是 ooooooooo 的样子,通过转换后的地址访问可以转换回到原始地址,转换的逻辑有点像短链…

mysql8绿色版安装教程

最近在安装mysql8绿色版,以下是安装过程中的一些步骤: 1:解压zip压缩包至想要安装的目录,比如解压到D:\mysql\mysql-8.0.29-winx64 2:在解压目录D:\mysql-8.0.29-winx64中创建MySQL配置文件my.ini 配置文件my.ini内容…

Unity3D安装:离线安装 Unity

推荐:将 NSDT场景编辑器 加入你的3D工具链 3D工具集: NSDT简石数字孪生 在没有 Hub 的情况下离线安装 Unity Unity 下载助手 (Download Assistant) 支持离线部署。在这种部署方式中,可下载用于安装 Unity 的所有文件,然后生成脚本…

【日常】如何增加粉丝的粘性?

【日常】如何增加粉丝的粘性? 1、前言2、官方活动3、作品质量4、打造自己的社区 1、前言 不知不觉间,铁粉已经过千了,粉丝数也即将两万,总而言之,越努力,越幸运,付出就有回报(当然在…

面了个阿里拿36K出来的,真是砂纸擦屁股,给我漏了一手

今年的春招已经结束,很多小伙伴收获不错,拿到了心仪的 offer。 各大论坛和社区里也看见不少小伙伴慷慨地分享了常见的面试题和八股文,为此咱这里也统一做一次大整理和大归类,这也算是划重点了。 俗话说得好,他山之石…

减肥瘦身自律APP软件开发功能有哪些?

减肥瘦身是很多女人一生都在奋斗的目标,如果找不对方法,减肥效果事倍功半还可能会反弹,所以越来越多的人推崇健康科学的减肥理念,把瘦身的重心转移到饮食和运动管理上,于是市场上出现了减肥瘦身自律类的APP软件&#x…

一位27岁软件测试员,测试在职近5年,月薪还不到2W,担心被应届生抢走饭碗

工作了近5年,一个月工资不到20K,担心被应届毕业生取代!互联网的快速发展伴随着员工适者生存的加速,测试员的薪资也在不断增长,以3年、5年、8年为一条分水岭。如果人们的能力和体力不够,他们就会被淘汰。看起…