当前位置: 首页 > article >正文

数据结构 (数组和矩阵,初级动态规划)

下面的图来自数据结构朱允刚老师

多维数组:

        eg:已知A[3][5][11][3],请问 A[i][j][k][l]的地址是多少   假设A的数据类型是 T

                A + (i*165+j+33+3*k+l)* sizeof T(默认按行优先存储,如果是按列优先存储就反过来)

                A + ( + 3+ 15+ 165) * sizeof T

矩阵的压缩技术

        对角矩阵:d[i]储存m[i][i]

       (以下都假设是n*n矩阵,默认行优先,如果列优先就反着来)

        上三角矩阵:(i<=j)的数据有效

        下三角矩阵:(i>=j)的数据有效

               下三角的压缩: m[i][j]是d数组的第几个 :d[ i * ( i - 1 ) / 2 + j-1 ]

                元素个数:(n+1)*n/2

        对称矩阵(m[i][j]==m[j][i])结论如下:

        题目:

        设有一个10*10 的对称矩阵 M ,将其 上三角 元素 M( i , j ) (1<= i , j <= 10)按列优先存入 C 语言的
        一维数组N 中,则元素 M 7,2 N 中的 下标是_____ . 2020 年考研题全国卷】

        三对角矩阵压缩

        稀疏矩阵的压缩:

                1,三元组表(i,j,val)可以用tuple来表示,也可以自己定义一个结构体

                

                若采用三元组表存储稀疏矩阵M,除三元组及 M包含的非零元素 个数外,下列数据中
                还需要保存的是________. 2023 年考研题 全国卷】
                I. M 的行数         II. M 中包含非零元素的行数        
                III. M 的列数         IV. M 中包含非零元素的列数
                A.仅 I、III                 B.仅 I、IV                 C.仅 II、IV                 D. I、 II III IV

                2,十字链表法

                有n+m个哨兵节点用于标记我们的行与列(感叹老师的图画的太好了)

        初始动态规划:

                我的理解是如果一个任务,可以被划分为多个相同前提条件的规模更小的子任务的时候,就可以利用动态规划来解决

        就像是普通的背包问题,前提条件都是现在的体积和i个物品,,当我们要知道前i个物品的情况的时候,本质就是前提条件都是已知体积和i-1个物品的情况现在考虑第 i 个物品

        可以发现当我们已知一个规模更小的子任务时,就可以思考出一个规模更大的任务了

        eg:小青蛙跳楼,可以跳1、2个台阶一次,有多少个跳法(0开始)

        f[1]=1 ;f[2]=2;

        f[i]=f[i-1]+f[i-2];

        

LL C(int n,m){       

         LL ans =1;

        for(int i=n-m+1,j=1;i<=n;i++,j++)ans=ans*i/j;

        return ans;

}

        最大子数组和:
int maxsubarr(int a[],int n){

        int f=a[0];

        int res=f;

        for(int i=1;i<n;i++){

                f=max(a[i],f+a[i]);

                res=max(f,res);

        }

        return res;

}


http://www.kler.cn/a/448452.html

相关文章:

  • C++ 杨辉三角 - 力扣(LeetCode)
  • Docker容器命令
  • 【jvm】主要参数
  • 3. Kafka入门—安装与基本命令
  • python\shell\c++语法对比
  • 【Vue.js 3.0】provide 、inject 函数详解
  • Ubuntu 环境安装 之 RabbitMQ 快速入手
  • 【学习笔记】数据结构(八)
  • 三七互娱Java开发150道面试题及参考答案(下)
  • Spring Boot 启动后的初始化数据加载原理解析与实战应用
  • Springmvc,spring ,mybatis,整合,ssm
  • Reactor
  • Linux-ubuntu之主频和时钟配置
  • 介绍 Html 和 Html 5 的关系与区别
  • 推动数字金融高质量发展行动方案之数据安全解读
  • Django框架与ORM框架
  • Git实用指南(精简版)
  • Vulnhub靶场Nginx解析漏洞复现
  • Chromium GN目标指南 - 查看GN目标(三)
  • C++简明教程(文章要求学过一点C语言)(3)
  • [机器学习]XGBoost(1)——前置知识
  • Android水波纹搜索效果
  • Java并发编程框架之综合案例—— 分布式爬虫(四)
  • springboot基于Java的校园导航微信小程序的设计与实现
  • React+Vite项目框架
  • 如何构建一个简单的SpringBoot程序