数据结构-矩阵

这篇具有很好参考价值的文章主要介绍了数据结构-矩阵。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

介绍

数据结构中的矩阵主要涉及以下几种:

  1. 对称矩阵:若矩阵A n*n中的元素特点是a[ij]=a[ji],则称之为n阶对称矩阵。对称矩阵的每一对元素占用一个存储单元,那么对于n阶矩阵,可以压缩到n(n+1)/2个元素的存储单元。
  2. 对角矩阵:对角矩阵是指矩阵中的非0元素都集中在以主对角线为中心的带状区域。也就是除了主对角线和直接在对角线上、下方若干条对角线上的元素除外,其余的元素均为0。
  3. 三角矩阵:包括上三角矩阵和下三角矩阵。上三角矩阵的对角线以下(不包括对角线)的元素均为常数0;下三角矩阵的对角线以上(不包括对角线)的元素均为常数0。

实现举例

对称矩阵
#include<iostream>
using namespace std;

class SymmetricMatrix {
private:
    int n;
    int *matrix;

public:
    SymmetricMatrix(int n) {
        this->n = n;
        matrix = new int[n*(n+1)/2];
    }

    ~SymmetricMatrix() {
        delete [] matrix;
    }

    int get(int i, int j) {
        if (i < j) {
            swap(i, j);
        }
        return matrix[i*(i+1)/2 + j];
    }

    void set(int i, int j, int value) {
        if (i < j) {
            swap(i, j);
        }
        matrix[i*(i+1)/2 + j] = value;
    }

    void print() {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                cout << get(i, j) << " ";
            }
            cout << endl;
        }
    }
};

int main() {
    SymmetricMatrix sm(3);
    sm.set(0, 0, 1);
    sm.set(0, 1, 2);
    sm.set(0, 2, 3);
    sm.set(1, 1, 4);
    sm.set(1, 2, 5);
    sm.set(2, 2, 6);
    sm.print();
    return 0;
}
举例说明

这个程序定义了一个SymmetricMatrix类,该类包含一个一维数组用于存储对称矩阵的元素,以及几个用于操作这个矩阵的方法。get方法用于获取矩阵中的元素,set方法用于设置矩阵中的元素,print方法用于打印矩阵的内容。在main函数中,我们创建了一个3x3的对称矩阵,并设置了其元素的值,然后打印了这个矩阵的内容。

对角矩阵
#include <iostream>
#include <vector>
using namespace std;

class DiagonalMatrix {
private:
    int n;
    vector<int> diagonal;

public:
    DiagonalMatrix(int n) {
        this->n = n;
        diagonal.resize(n, 0);
    }

    int get(int i, int j) {
        if (i == j) {
            return diagonal[i];
        } else {
            return 0;
        }
    }

    void set(int i, int j, int value) {
        if (i == j) {
            diagonal[i] = value;
        }
    }

    void print() {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                cout << get(i, j) << " ";
            }
            cout << endl;
        }
    }
};

int main() {
    int n = 5;  // 矩阵的大小为5x5
    DiagonalMatrix dm(n);  // 创建一个大小为5x5的对角矩阵
    dm.set(0, 0, 1);  // 设置对角线上的元素值为1, 2, 3, 4, 5
    dm.set(1, 1, 2);
    dm.set(2, 2, 3);
    dm.set(3, 3, 4);
    dm.set(4, 4, 5);
    dm.print();  // 打印矩阵的内容
    return 0;
}
举例说明

这个示例中,定义了一个DiagonalMatrix类,该类包含一个一维数组用于存储对角线上的元素,并定义了几个方法,包括获取元素值、设置元素值以及打印矩阵内容。在main函数中,我们创建了一个大小为5x5的对角矩阵,并设置了对角线上的元素值,然后打印了这个矩阵的内容。由于对角矩阵只有对角线上的元素不为0,因此在get方法中,如果传入的行列号不相等,直接返回0即可。在set方法中,只有当传入的行列号相等时,才会将对角线上的元素值进行设置。这个示例中,创建的对角矩阵是一个单位矩阵,即对角线上的元素值都为1。

三角矩阵
#include <iostream>
#include <vector>
using namespace std;

class TriangularMatrix {
private:
    int n;
    vector<vector<int>> matrix;

public:
    TriangularMatrix(int n) {
        this->n = n;
        matrix.resize(n, vector<int>(n));
    }

    int get(int i, int j) {
        if (i >= j) {
            return matrix[i][j];
        } else {
            return 0;
        }
    }

    void set(int i, int j, int value) {
        if (i >= j) {
            matrix[i][j] = value;
        }
    }

    void print() {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                cout << get(i, j) << " ";
            }
            cout << endl;
        }
    }
};

int main() {
    int n = 5;  // 矩阵的大小为5x5
    TriangularMatrix tm(n);  // 创建一个大小为5x5的下三角矩阵
    // 设置下三角矩阵的元素值,其中对角线及其下方的元素值不为0
    tm.set(0, 0, 1);  // 第一行第一列的元素值为1
    tm.set(1, 0, 2);  // 第二行第一列的元素值为2
    tm.set(1, 1, 3);  // 第二行第二列的元素值为3
    tm.set(2, 0, 4);  // 第三行第一列的元素值为4
    tm.set(2, 1, 5);  // 第三行第二列的元素值为5
    tm.set(2, 2, 6);  // 第三行第三列的元素值为6
    tm.print();  // 打印矩阵的内容
    return 0;
}
举例说明

这个示例中,定义了一个TriangularMatrix类,该类包含一个二维数组用于存储下三角矩阵的元素,并定义了几个方法,包括获取元素值、设置元素值以及打印矩阵内容。在main函数中,我们创建了一个大小为5x5的下三角矩阵,并设置了其中一些元素的值,然后打印了这个矩阵的内容。由于下三角矩阵只有对角线及其下方的元素不为0,因此在get方法中,如果传入的行号小于列号,直接返回0即可。在set方法中,只有当传入的行号大于等于列号时,才会将对应位置的元素值进行设置。这个示例中,创建的下三角矩阵是一个普通的下三角矩阵,你可以根据需要修改这个示例代码来实现你想要的功能。同时,你也可以根据类似的方法实现上三角矩阵。

总结

在数据结构中,矩阵通常用于存储和处理大量数据,例如图像处理、机器学习、线性代数等领域。这些特殊类型的矩阵(对称矩阵、对角矩阵、三角矩阵)在存储和处理时可以利用其特性进行优化,例如对称矩阵可以只存储一半的元素,对角矩阵可以只存储对角线上的元素,从而节省存储空间和提高处理效率。文章来源地址https://www.toymoban.com/news/detail-788711.html

到了这里,关于数据结构-矩阵的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 相似对角化的性质,实对称矩阵和相似对角化的联系。(简单梳理)

    不同特征值的特征向量一定正交 。 实对称矩阵一定可以相似对角化,并且 可以利用正交矩阵将其相似对角化 。 两实对称矩阵相似充要条件是两个矩阵有相同的特征值。 n阶矩阵n个不同的特征值一定可以相似对角化(不同特征值对应的特征向量线性无关) 。 实对称矩阵一定

    2024年02月12日
    浏览(50)
  • 矩阵的相似对角化

    矩阵相似的 定义 设 A与B都是N阶方阵,若是一个可逆的N阶矩阵P,使得,则称A与B相似,记作,P成为由A到B的相似变换矩阵 相似矩阵的 性质 1、 矩阵A与它自身相似 2、若,则 如果A与B相似,那么B与A也相似 证明: 所以为B到A的相似变换矩阵 3、若,则 相似具有传递性 证明:

    2024年02月08日
    浏览(84)
  • [矩阵论]正规矩阵可酉相似对角化

    满足: A H A = A A H A^H A = AA^H A H A = A A H 的矩阵,被称为正规矩阵 证明 A A A 可以酉相似对角化的 充要 条件是, A A A 是正规矩阵 A H A = A A H A^H A = AA^H A H A = A A H 这里插一句: 一般矩阵可以对角化是: P − 1 A P = Λ P^{-1}AP = Lambda P − 1 A P = Λ Λ Lambda Λ 是对角阵,而对角化只要

    2023年04月22日
    浏览(44)
  • 【如何快速判断矩阵是否相似对角化】

    关于如何快速判断矩阵是否可以相似对角化的方法 原理 :

    2024年02月13日
    浏览(79)
  • 矩阵理论| 基础:特征值与特征向量、代数重数/几何重数、相似对角化和Jordan标准型

    矩阵 A mathbf A A 的特征值与特征向量满足 A x = λ x mathbf Amathbf x=lambdamathbf x Ax = λ x ,即 ( A − λ I ) x = 0 (mathbf A-lambdamathbf I)mathbf x=0 ( A − λ I ) x = 0 ,且 x ≠ 0 mathbf xneq0 x  = 0 特征值 : d e t ( A − λ I ) = 0 det(mathbf A-lambdamathbf I)=0 d e t ( A − λ I ) = 0 的根,其中 p ( λ

    2024年02月05日
    浏览(55)
  • 【证明】矩阵可以对角化的充要条件是矩阵有n个线性无关的特征向量

    定理 1 n n n 阶矩阵 A boldsymbol{A} A 与对角矩阵相似(即 A boldsymbol{A} A 能对角化)的充分必要条件是 A boldsymbol{A} A 有 n n n 个线性无关的特征向量。 证明 不妨设有可逆矩阵 P boldsymbol{P} P ,使 P − 1 A P = Λ boldsymbol{P}^{-1} boldsymbol{A} boldsymbol{P} = boldsymbol{Lambda} P − 1 A P = Λ 为

    2023年04月08日
    浏览(59)
  • 数据结构— 数组、特殊矩阵、稀疏矩阵

    💟作者简介:大家好呀!我是 路遥叶子 ,大家可以叫我 叶子 哦! ❣️     📝个人主页:【路遥叶子的博客】 🏆博主信息: 四季轮换叶 , 一路招摇胜!      专栏 【数据结构-Java语言描述】  【安利Java零基础】 🐋希望大家多多支持😘一起进步呀!~❤️ 🌈若有帮助

    2024年02月02日
    浏览(53)
  • 【数据结构-矩阵】矩阵的相关公式推导

    设数组元素长度为 L。 1.1 一维数组 数组下标从 0 开始( A[0]–A[n] ,一共 n+1 个),假设当前下标为 A[i] : 第几个 = i + 1 存储地址 = 首地址 + (第几个-1) * L = A[0] 地址 + i * L 数组下标从 1 开始( A[1]–A[n] ,一共 n 个),假设当前下标为 A[i] : 第几个 = i 存储地址 = 首地址 + (第

    2023年04月22日
    浏览(50)
  • 数据结构——稀疏矩阵

    在矩阵中,若数据为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵;与之相反的叫做稠密矩阵。 将棋盘看作一个二维数组,在棋子落盘时,要记录该棋子落下的坐标,其他坐标的值不做记录,默认为0。由于记录很多无意义的数据

    2024年02月03日
    浏览(41)
  • 【数据结构】邻接矩阵法

    顶点用一维数组Vex表示,其中可存放较为复杂的信息(如下标),边表用二维数组Edge表示,存放边的信息(两顶点之间有直接相连的边为1,否则为0)。  如何求顶点的入度 、出度? 对于无向图  第 i 个节点的度: 该结点所在行列的非0元素个数 对于有向图  第i个节点的

    2024年02月12日
    浏览(60)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包