【算法】笔试题记录

news/2024/9/25 23:11:00

哇今天做了道特别有意思的题。

编程就给了两道,第一题特别简单,a、b两个数,每次选其中一个数*2,这样操作两次,问最后得到的两数之和的期望值是多少。

简单吧?因为每次选择都有两种可能性,操作两次后就会有四种可能的结果(22)。其中有两个结果是重复的(2a, 2b),剩下两个分别是(a, 4b)和(4a, b)。把这四个结果求和除以4就是期望值。或者还有种角度,分别计算两次操作后 a 的期望和 b 的期望,把两者相加就是两数之和的期望(期望的线性性)。

第二题上来就看懵了。定义2*2的相邻元素(上下、左右)互不相同的01矩阵为好矩阵(比如[1 0 0 1]),而一个矩阵中包含好子矩阵的数量为它的权值。输入n、m,问所有 n * m 的矩阵权值的总和是多少? 

啥玩意?我真的想破脑袋。后来笔试结束了才猛然醒悟,这两题是有联系的!第一题看似简单,其实正暗示了第二道题的解法:期望

问题描述

矩阵定义:我们考虑所有可能的  n * m  的 0-1 矩阵。

•权值定义:每个矩阵的权值是其中包含的好子矩阵的数量。

好子矩阵定义:一个  2 * 2  的子矩阵,满足相邻元素(上下、左右)互不相同。

变量定义

总矩阵数  N :所有可能的  n * m  矩阵的数量。N = 2n*m(因为每个元素有 2 种可能,共有  n * m  个元素)

子矩阵位置数  K :每个矩阵中可能的  2 * 2  子矩阵的数量。K = (n - 1) * (m - 1)(因为在  n * m  的矩阵中,横向有  n - 1  个位置,纵向有  m - 1  个位置)

•好子矩阵的概率  P :随机生成的  2 * 2  子矩阵是好子矩阵的概率。P = 2/16 = 1/8(因为共有 16 种可能的  2 * 2  0-1 矩阵,其中只有 2 种是好子矩阵)

推导过程

目标:计算所有可能的  n * m  矩阵的权值总和,即所有矩阵中好子矩阵的总数量。

思路从整体角度考虑,我们可以将问题转化为计算所有位置上好子矩阵出现的总次数。

1. 计算单个位置上的好子矩阵数量

•在单个位置上,可能的子矩阵数量等于总矩阵数  N ,因为每个矩阵在该位置上都有一个对应的子矩阵。

•在该位置上,好子矩阵的总数量为: N * P(每个矩阵在该位置上有一个子矩阵,成为好子矩阵的概率为  P )

2. 计算所有位置上的好子矩阵数量

•总的位置数为  K ,每个位置独立且等价。

•所有位置上的好子矩阵总数为:总权值 = K * N * P

逻辑解释

有人可能疑惑了,每个位置怎么会独立呢?相邻子矩阵不是有共享的元素吗?

这里就要引入关键概念:期望的线性性

期望的线性性是指,对于任意随机变量的和,其期望等于这些随机变量的期望之和,即使这些随机变量之间有相关性。这一点非常重要。

在我们的情境中:

随机变量定义:对于矩阵中的每个可能的  2 * 2  子矩阵位置,我们定义一个指示变量  Xi ,如果该位置上的子矩阵是好子矩阵,其值为 1 ,否则为 0。

总权值:所有矩阵的总权值等于所有  Xi  的和。

尽管这些  Xi 之间存在相关性(因为子矩阵共享元素),但在计算期望时,这种相关性并不影响总期望值的计算,期望的线性性仍然成立。

对于每个位置  i :

总期望值:

其中  E[X]  是任意一个位置上子矩阵为好子矩阵的概率  P 。

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

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

相关文章

使用AI进行需求分析的案例研究

生成式 AI 的潜在应用场景似乎无穷无尽。虽然这令人兴奋,但也可能让人不知所措。因此,团队在使用这项技术时需要有明确的目标:关键是要明确生成式 AI 在团队工作中能产生哪些实质性影响。 在软件工程中,一个引人注目的应用场景是需求分析。这是一个常常被忽视但充满挑战的环…

02 第三组(4个)进制转换

进制转换:二进制,十六进制、八进制、十进制 bin 二进制 oct 8进制 hex 十六进制 int 10进制二进制 和十进制#10进制转二进制 v1 = bin(48) print(v1)#二进制转10进制 v1 = 0b1010101 v2 = int(v1, base=2)八进制 和十进制#10进制转八进制 v1 = oct(48) print(v1)#八进制转1…

实验1_C语言输入输出和简单程序应用编程

任务一 1-1#include<stdio.h> int main() { printf(" O "); printf("<H>"); printf("I I"); printf(" O "); printf("<H>"); printf("I I"); return 0; }1-2#include<stdio.h> int main(…

初识vue

1.概述我眼中的vue,vue是前端开发的一个框架,可以大大提高开发的效率,最新的是vue3,企业目前使用vue2,其主要核心是V-VM-M的思想,作用是让数据和图像进行双向绑定,就是视图改变数据改变,数据改变视图改变. 2.在使用Vue时要应用文件vue.js在头部,在其他位置引用起不到作用3.在定…

2023-9-25

vscode快捷键实操练习

操作流程违规作业监测系统

操作流程违规作业监测系统基于计算机视觉深度学习技术,操作流程违规作业监测系统对石油煤矿化工等高危场景下作业人员未按照操作流程进行正常操作行为进行实时分析识别检测,如操作流程违规作业监测系统发现现场人员违规作业操作行为,不需人为干预,立即自动抓拍存档预警并同…

01 本地代码推送到码云

访问网站根据提示进行注册即可 https://gitee.com/新建仓库 注册后,进行登录,在右上角查看创建的代码仓库如果要分享别人,进行上传代码,将:https://gitee.com/jhchena/test.git 分享给别人即可 欢乐马 / test 中的test 表示在码云上面,创建存放代码的文件夹本地进行配置码云 先…

macOS 中如何调整 OBS 录制视频的窗口大小 All In One

macOS 中如何调整 OBS 录制视频的窗口大小 All In One 在 OBS 的预览界面中,按住 Option / Alt 键, 拖动红色的四个方向控制块, 动态调整所需录制的窗口大小!✅ PS: 使用 m3u8 文件的 ts 格式视频无法下载的一种视频下载的替代方案!(需后期视频剪辑)macOS 中如何调整 OBS…