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

二、为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乘积),而不是标准的矩阵加法和减法。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Springboot整合WebSocket

目录 1.WebSocket 简介 2.WebSocket 实战 1.WebSocket 简介 WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要…

基于html+css的图展示98

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

C++入门

文章目录 😀1. 命名空间😄1.1 命名空间定义😄1.2 命名空间使用 😊2. 输入和输出😉3. 缺省参数🫠3.1 缺省参数概念🫠3.2 缺省参数分类 😬4. 函数重载🙄4.1 函数重载概念&a…

TypeScript9-声明文件

本篇文章来讲 TypeScript 的声明文件。 当我们在使用第三方库的时候,很多第三方库不是用 TS 写的,它们是通过原生的 JavaScript 或者是浏览器 / 或者是 node 提供的 run time 对象。如果我们直接使用 TS 肯定就会报编译不通过。 1. 声明语句 假设一个…

浅析变电站无人值守管理的模式与特点

安科瑞虞佳豪 近年来,随着电网的发展,变电站实行无人值班管理模式已成为电网的发展方向。自1998年始,辉县市就开始了变电站综合自动化改造,截止目前全局所属24座变电站(其中35kV19座、110kV5座)已全部实现…

API自动化测试【postman生成报告】

PostMan生成测试报告有两种: 1、控制台的模式 2、HTML的测试报告 使用到一个工具newman Node.js是前端的一个组件,主要可以使用它来开发异步的程序。 一、控制台的模式 1、安装node.js 双击node.js进行安装,安装成功后在控制台输入node …

Java集合基础

4 集合基础 集合提供一种存储空间可变的存储模型,存储的数据容量可以改变ArrayLis<>: 可调整大小的数组实现<>:是一种特殊的数据类型,泛型可储存重复元素怎么使用呢 在出现E的地方我们使用引用数据类型替换即可举例:ArrayList<String>、ArrayList<Stu…

财务共享时代企业数智化应用能帮我们做些什么?

随着企业规模的不断扩大和业务范围的逐步扩展&#xff0c;财务工作的难度和复杂度也在不断提高&#xff0c;传统的手工录入和处理方式呈现出流程长、效率低、易出错等问题。为了提升财务工作的效率和准确性&#xff0c;越来越多的企业开始利用数智化应用打造企业内部的财务数智…

绝对不能错过的7个零基础免费的ChatGPT镜像网站

还在为打不开openai官网烦心&#xff1f;本文帮你实现ChatGPTMidJourney自由(&#xffe3;∇&#xffe3;)/ &#x1f4d2;收集了一些截至目前(2023年5月25日午12:00)可以免费访问&#xff0c;并且零基础也能正常使用的镜像网站&#xff0c;后续将持续维护更新(&#xff61;&a…

平安银行广州分行立足地域文化,增强差异化权益服务软实力

立足地域文化&#xff0c;拓展差异化权益服务 瓦屋纸窗之下&#xff0c;一盏清茶&#xff0c;三五好友&#xff0c;怡然自若。中国人对茶的喜爱由来已久&#xff0c;茶文化已成为中华传统文化中一张亮丽的名片&#xff0c;而广东茶文化则是中国四大茶文化系列之一。平安银行广州…

抖音seo优化源代码搭建+抖音小程序私有化开源部署

抖音seo优化源码&#xff0c;抖音seo矩阵系统搭建&#xff0c;抖音账号矩阵系统开发&#xff0c;企业在做账号矩阵过程中&#xff0c;最头疼的莫过于私域线索转化&#xff0c;作为开发者都知道&#xff0c;目前市面上我们了解的矩阵系统除了挂载POI信息外&#xff0c;无法挂载留…

unity四叉树和视锥体剔除

这个最好还是看代码&#xff0c;项目有注释放在这里&#xff1a; GetbadEarlyup/Quadtree-cone-scene: 这是一个unity四叉树场景视锥体剔除的Demo (github.com)https://github.com/GetbadEarlyup/Quadtree-cone-scene国内地址&#xff1a; Quadtree-cone-scene: unity四叉树和…

VESD静电监控系统:提高静电防护效果与管理效率

随着科学技术不断发展&#xff0c;现代的工业对静电防护的要求越来越高。因为静电的存在可能会对产品质量、工作环境、甚至是人身产生威胁。静电监控系统是一项高效的管理工具&#xff0c;能够有效地控制和监测静电产生的情况&#xff0c;提高静电防护效果和管理效率。 VESD静电…

U盘超级加密3000试用版与正式版的区别有哪些?

U盘超级加密3000是一款专业的U盘加密软件&#xff0c;它可以为U盘、移动硬盘、内存卡等移动存储设备加密。软件拥有正式版和试用版&#xff0c;那么这两个版本有什么区别呢&#xff1f;下面我们就一起来了解一下。 U盘超级加密3000试用版和正式版的区别 打开软件时的区别 试用…

基于SSM的酒店客房管理系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 酒店管理系统是一款高…

VMware重新安装VMwareTool字体为灰色情况+ubuntu时间设置

文章目录 前言&#xff1a;1. 重新安装VMwareTool字体为灰色2. VMware下ubuntu的时间设置 前言&#xff1a; 之前退出VMware关闭的时候没有等待虚拟机的状态保存&#xff0c;强制关机了。这就导致后面使用的时候&#xff0c;共享目录无法显示情况。对于上面的情况我的博客里面…

ASP-IIS中间件文件解析与写权限

ASP-IIS中间件文件解析与写权限 IIS文件解析 IIS 6 解析漏洞 1、该版本默认会将*.asp;.jpg 此种格式的文件名&#xff0c;当成Asp解析 2、该版本默认会将*.asp/目录下的所有文件当成Asp解析。 如&#xff1a;logo.asp;.jpg xx.asp/logo.jpgIIS 7.x 解析漏洞 在一个文件路…

SSM编程---Day 02

目录 一、核心配置文件 二、junit介绍 三、自定义java注解 四、自定义注解 五、添加log4j的支持 六、sql映射文件的介绍 一、核心配置文件 1、核心配置文件中需要注意顺序 2、根节点 <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN"…

打家劫舍 III——力扣337

文章目录 题目描述法一&#xff1a;动态规划 题目描述 法一&#xff1a;动态规划 问题简化&#xff1a;一棵二叉树&#xff0c;树上的每个点都有对应的权值&#xff0c;每个点有两种状态&#xff08;选中和不选中&#xff09;&#xff0c;问在不能同时选中有父子关系的点的情况…

js正则校验特殊的不可见字符

背景 表单的输入框&#xff0c;用户可能从Excel或者其他地方直接复制粘贴&#xff0c;这时候提交到后端会导致获取的用户输入中包含一些特殊的不可见字符&#xff0c;比如tab键或者制表符等&#xff0c;这时需要在前端对用户输入做一些检验&#xff0c;检查是否存在不可见字符…