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

news/2024/12/23 21:18:40 标签: 数据结构, 矩阵, 算法

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

多维数组:

        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.niftyadmin.cn/n/5797014.html

相关文章

数据结构 C/C++(实验六:查找)

&#xff08;大家好&#xff0c;今天分享的是数据结构的相关知识&#xff0c;大家可以在评论区进行互动答疑哦~加油&#xff01;&#x1f495;&#xff09; 目录 提要&#xff1a;实验题目 一、实验目的 二、实验内容及要求 三、源程序及注释 实验1代码&#xff08;折半查…

Kafka快速扫描

Architecture 系统间解耦&#xff0c;异步通信&#xff0c;削峰填谷 Topic 消息主题&#xff0c;用于存储消息 Partition 分区&#xff0c;通过扩大分区&#xff0c;可以提高存储量 Broker 部署Kafka服务的设备 Leader kafka主分区 Follwer kafka从分区 高性能之道&#xff1a…

【开源库 | minizip】Linux(Ubuntu18.04)下,minizip的编译、交叉编译

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a; 2024-12-20 …

【RK3588 Linux 5.x 内核编程】-内核中断与ThreadedIRQ

内核中断与ThreadedIRQ 文章目录 内核中断与ThreadedIRQ1、Threaded IRQ介绍2、Threaded IRQ相关API3、驱动实现4、驱动验证当 Interrupt 触发时,Interrupt handler 应该执行得非常快,它不应该运行更多的时间(它不应该执行耗时的任务)。 如果我们有执行更多任务的中断处理程…

MyBatis实现自定义MyBatis插件详解

MyBatis实现自定义MyBatis插件详解 初识插件拦截对象拦截实现加载流程xml配置插件XMLConfigBuilder加载插件创建插件对象 例子确定拦截对象实现拦截接口配置插件测试 MyBatis的一个重要的特点就是插件机制&#xff0c;使得MyBatis的具备较强的扩展性&#xff0c;我们可以根据My…

JavaIO 在 Android 中的应用

主要是学习如何设计这样的 IO 系统&#xff0c;学习思想而不是代码本身。 1、装饰模式在 IO 中的应用 IO 嵌套其实使用到了装饰模式。装饰模式在 Android 中有大量的使用实例&#xff0c;比如 Context 体系&#xff1a; 可以看到 Context 还是基本上遵循了标准装饰模式的结构…

windows C#-编写复制构造函数

C # 记录为对象提供复制构造函数&#xff0c;但对于类&#xff0c;你必须自行编写。 编写适用于类层次结构中所有派生类型的复制构造函数可能很困难。 如果类不是 sealed&#xff0c;则强烈建议考虑创建 record class 类型的层次结构&#xff0c;以使用编译器合成的复制构造函…

【C语言之】二进制的四种位运算:取反、与、或、异或

【C语言之】二进制的四种位运算&#xff1a;取反、与、或、异或 1、按位取反运算&#xff08; bit not : ~ &#xff09; 对操作数的每一位执行逻辑取反操作&#xff0c;即将每一位的 0 变为 1&#xff0c;1 变为 0。取反运算符&#xff0c;按二进制位进行"取反"运…