矩阵计算复杂度(简洁版)(Computational complexity of matrix)

这篇具有很好参考价值的文章主要介绍了矩阵计算复杂度(简洁版)(Computational complexity of matrix)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

This blog mainly focuses on the complexity of matrix calculation. I will introduce this topic in three parts: main results, analysis, and proof, code.

I、 Results

Let ,  and invertible matrix . Then we have following computational complexity :

(1)  ;

(2) 矩阵计算复杂度(简洁版)(Computational complexity of matrix);

(3) ;

II、 Analysis and proof

2.1 Definition

The usual computation for integer multiplication has a complexity of . This means that there is a constant  such that the multiplication of two integers of at most n digits may be done in a time less than .

2.2 Analysis

For model (1): Since  is a n rows and n column and  is n rows and m column, then there is  times to multiply, i.e., .

For model (2): Similar reason as (1) enable us to get there is  times plus   times to multiply, i.e., 矩阵计算复杂度(简洁版)(Computational complexity of matrix).

For model (3): Based on , we can get invertible matrix through elementary row transform, i.e.,

.

Hence we only need to consider how many times multiplication in the process of elementary row transforms. By easy calculation, we get 矩阵计算复杂度(简洁版)(Computational complexity of matrix).

III、 CODE

I omit the code for model(1) and model(2) as it is too easy. 文章来源地址https://www.toymoban.com/news/detail-412155.html

code idea for model(3) :(Gaussian Elimination)

# input an invertible matrix A
# Suppose a ideal condition: no row transform

import sys
 
 
class MatrixInverse:
    def __init__(self, matrix):
        self.matrix = matrix
        self.a = len(self.matrix)
        self.b = len(self.matrix[0])
        if self.a != self.b:
            print("This is a vertible matrix")
 
    def judge(self):
        c = 1
        e = 0
        m = self.matrix
        for i in range(self.a):
            for j in range(self.a):
                c = c * m[j % self.a][(i + j) % self.a]
                # print(f"{j % self.a},{(i + j) % self.a}")
            e = e + c
            c = 1
        for i in range(self.a):
            for j, k in zip(range(0, self.a*2, 2), range(self.a)):
                c = c * m[k % self.a][(i + j) % self.a]
                # print(f"{k % self.a},{(i + j) % self.a}")
            e = e - c
            c = 1
        print(f"该矩阵的值为:{e}", end=",")
        if e != 0:
            print("Exist invertible matrix。")
        else:
            print("No invertible matrix。")
        return e
 
    def calculate(self):
        """Use basic row change mathod"""
        if MatrixInverse.judge(self) == 0:
            sys.exit()
        d = [[0 for i in range(self.a*2)] for j in range(self.a)]
        e = [[0 for i in range(self.a)] for j in range(self.a)]
        for i, j in zip(range(self.a), range(self.a)):
            e[i][j] = 1
        for i in range(self.a):
            for j in range(self.a):
                d[i][j] = self.matrix[i][j]
        for i in range(self.a):
            for j in range(self.a, self.a*2):
                d[i][j] = e[i][j-self.a]
        """Choose pivot again"""
        m1 = []
        for i in range(self.a):
            m1.append(i)
        for i in range(self.a):
            m = 0
            while m < self.a:  # choose a suitable pivot
                if d[m][i] != 0 and i < self.a and m in m1:
                    c2 = d[m][i]  # c2 is pivot, m is row,i is column。
                    for x in range(self.a*2):  # let pivot be 1
                        d[m][x] = d[m][x]/c2  # 
                    for j in range(self.a):  # divide by pivot row
                        c3 = d[j][i]
                        for k in range(self.a*2):
                            if j != m:
                                d[j][k] = d[j][k]/c3 - d[m][k]
                    m1.remove(m)
                    m = self.a  # this column finished next column
                else:
                    m += 1
        for i in range(self.a):
            for j in range(self.a):
                if d[i][j] != 0:
                    c5 = d[i][j]
                    for k in range(self.a*2):
                        d[i][k] = d[i][k]/c5
        """Save invertible matrxi into d2"""
        d2 = [[0 for i in range(self.a)] for j in range(self.a)]
        for i in range(self.a):
            for j in range(self.a, self.a*2):
                d2[i][j-self.a] = float('%.2f' % d[i][j])
        print("The invertible matrix of A is:")
        print(d2)
 
 
n = [[1, 2, 3], [2, 1, 3], [3, 4, 3]]
s = MatrixInverse(n)
s.calculate()

到了这里,关于矩阵计算复杂度(简洁版)(Computational complexity of matrix)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构:时间复杂度和空间复杂度计算

    算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度, 而空间效率被称作空间复杂度。 时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主 要衡量一个算法所需要的额外空间,在计算机发展的早期,计算机的存储容量很小

    2024年02月11日
    浏览(27)
  • 优于立方复杂度的 Rust 中矩阵乘法

    中途:三次矩阵乘法         几年前,我在 C++ 年编写了 Strassen 矩阵乘法算法的实现,最近在 Rust 中重新实现了它,因为我继续学习该语言。这是学习 Rust 性能特征和优化技术的有用练习,因为尽管 Strassen 的算法复杂性优于朴素方法,但它在 算法 结构中的分配和递归开

    2024年02月12日
    浏览(79)
  • 说说你对算法中时间复杂度,空间复杂度的理解?如何计算?

    算法(Algorithm)是指用来操作数据、解决程序问题的一组方法。对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但在过程中消耗的资源和时间却会有很大的区别 衡量不同算法之间的优劣主要是通过时间和空间两个维度去考量: 时间维度:是指执行当前算

    2024年04月09日
    浏览(29)
  • 数据结构 -> 时间复杂度和空间复杂度的计算(做题助推器)

    文章目录 ✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉 🍎个人主页:橘橙黄又青_C语言,函数,指针-CSDN博客 主要掌握时间复杂度和空间复杂度的计算,在刷题中完成刷题要求。 概念做了一定的简化慢慢了解,经过 C语言的动态内存管理 我们已

    2024年02月04日
    浏览(31)
  • 一、计算复杂度

    1、决定性问题: 一个决定性问题(decision problem)是指其输出,只有“是”或“否”的问题。 1、问题描述: 可于确定型图灵机以多项式时间求解的决定性问题。 当一个决定性问题存在一个能在多项式时间内找出解的算法时,则称此问题落在P 的集合中。 2、典型问题: 质数问

    2024年02月11日
    浏览(19)
  • 算法时间复杂度计算

    目录 1.时间复杂度计算 1.1 时间复杂度例题 1.1.1例题 1.1.2例题 1.1.3例题 1.1.4例题 1.2时间复杂度leetcode例题        首先,我们需要了解时间复杂度是什么:算法的时间复杂度是指 算法在编写成可执行程序后,运行时需要耗费的时间资源——通俗的讲,就是一个算法运行的快慢

    2023年04月12日
    浏览(93)
  • 时间复杂度计算-例题集合

    牢记:Tn是当前变量的 执行次数 我们要做的就是讲Tn从各种嵌套中拎出来,用n表示。 每层循环的变量ijk表示都不一样,但是实际上都是指 n 在执行过程中的变化 ) 上面算法的运行的次数的函数为 f(n)=3 ,根据推导大O阶的规则1,每次运行程序 每条语句执行一次 ,所以这个算

    2023年04月08日
    浏览(34)
  • Python时间复杂度计算习题

    计算时间复杂度是计算机科学中的重要技能,尤其是在算法和数据结构的领域。以下是关于Python时间复杂度计算的20个问题,这些问题可以用于测试对时间复杂度的理解: 对于以下代码片段,时间复杂度是多少? 下面代码的时间复杂度是? 以下代码的时间复杂度是? 这段代

    2024年02月13日
    浏览(30)
  • C语言:杨氏矩阵中查找某数(时间复杂度小于O(N))

    有一个 数字矩阵 ( 二维数组 ), 矩阵的 每行从左到右是递增的 , 矩阵从上到下是递增的 , 请编写程序在这样的矩阵中查找某个数字是否存在, 要求: 时间复杂度小于O(N) 。                       =========================================================================            

    2024年02月15日
    浏览(34)
  • 数据结构:关于时间复杂度的例题计算

    该程序,最上面的嵌套循环里,i每执行一次,j就执行N次,所以嵌套循环执行次数为N*N次;中间的k变量循环了2*N次;最后M变量循环10次。所以总共执行了 N*N+2*N+10 次! 所以该程序时间复杂度为 O(N 2 ) 。 该程序,上面的for循环执行了2*N次,下面的M循环了10次。所以该时间复杂

    2024年02月07日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包