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

概率分析和随机算法

目录

雇佣问题

概率分析

随机算法 

生日悖论

随机算法

 概率分析

球与箱子

总结


雇佣问题

有n个候选人面试,如果面试者比目前雇佣者的分数高,评价更好,那么就辞掉当前雇佣者,而去聘用面试者,否则继续面试新的候选人。面试完n个人结束。

  best为到i个候选人中最佳面试者, a数组时候选人名单。

起始条件:best= a[0]; 聘用第一个面试者。

保持:if(best < a[i]) best = a[i]; 聘用面试者。

终止条件:当i == n 时,迭代终止。

代码:

#include "stdio.h"void main() {int best = 0;int n = 10;int a[10] = {0};for (size_t i = 0; i < n; i++){scanf("%d", &a[i]);if(best < a[i]) {best = a[i];}}}

 算法分析

代码

代价

面试

scanf("%d", &a[i]);

C1

雇佣

best = a[i];

C2

假如面试过程中有m个人被雇佣,则总的代价=O(c1*n + c2*m).(0<m<=n)

最坏情况分析

m=n时,总的代价最大,此时为O(c1*n + c2*n). 由于c1远小于c2,因此总代价为O(c2*n).

平均情况分析

求平均情况就是求m=1~n的所有可能的均值。在数学中求平均值可以转化为求一个参量的期望。那如何求这个期望值呢?

概率分析

一个面试者是否面试通过服从二项分布。

m个雇佣者的被雇佣的概率

Xi

0

第1个

第2个

第n个

P

0

1

1/2

1/n

E[X] = E[X1] + E[X2] + … +E[Xn] = 1+1/2+…+1/n = lnx + O(1).

随机算法 

代码:

#include "stdio.h"
#include "math.h"
#include <time.h>void permute_by_sorting(int p[10], int a[10]);
void swap(int *a, int *b);
void main() {int best = 0;int rank = 0;int n = 10;int a[10] = {5,2,3,1,4,9,8,10,7,6};int p[10] = {0};permute_by_sorting(p, a);for (size_t i = 0; i < n; i++){if(best < a[i]) {best = a[i];rank = i;}}printf("\nThe best hired man is %dth %d", rank, best);}void permute_by_sorting(int p[10], int a[10]) {int count = 10;srand(time(0));for (size_t i = 0; i < count; i++){p[i] = rand()%1000;printf("%d, ", p[i]);}printf("\n");for (size_t i = 0; i < count; i++){for (size_t j = i; j < count; j++){if(p[i] > p[j]) {swap(&p[i], &p[j]);swap(&a[i], &a[j]);}}printf("%d ", a[i]);}}void swap(int *a, int *b) {int temp;temp = *a;*a = *b;*b = temp;
}

输出结果:

随机排列数列

可以从输出结果看出,每次出现的优先级的数列不一样,是随机的。样本空间为n!种排列方式,也就是全排列方式,这样就形成了随机算法了,可以使用概率分析算法的性能,每次出现的排列的概率都是1/n!。

以下两行代码能够执行到的次数m的期望E(X)= O(lnx).

            best = a[i];rank = i;

生日悖论

问题描述:一个屋子里,必须要有多少人以上,才可以至少有生日相同的两个人?

随机算法

代码

#include "stdio.h"
#include "math.h"
#include <time.h>#define PERSON_NUM 40
void permute_by_sorting(int p[10]);void main() {int same_birthday_p1 = -1;int same_birthday_p2 = -1;int n = PERSON_NUM;int p[PERSON_NUM] = {0};permute_by_sorting(p);for (size_t i = 0; i < n; i++){for (size_t j = i+1; j < n; j++){if(p[j] == p[i]) {same_birthday_p1 = i;same_birthday_p2 = j;break;}}}printf("\nThe best hired man is %d and %d", same_birthday_p1, same_birthday_p2);}void permute_by_sorting(int p[PERSON_NUM]) {int count = PERSON_NUM;srand(time(0));for (size_t i = 0; i < count; i++){p[i] = rand()%365;printf("%d, ", p[i]);}}

PERSON_NUM设为10和40的输出结果: 

 概率分析

i人和j人两个生日相等且在r日的概率 P[r]= 1/365*1/365. 令n=365. P[r]=1/n*n.

而i人和j人生日相等的情况有1,2,3…,365种,所以P = P[r]*n = 1/n.

以下的代码中,最后执行了判断语句中的语句时,有X个人相同的期望值为E[X].

E[X]= k(k-1)/(2*n)  (PERSON_NUM = k, n = 365).

if(p[j] == p[i]) {same_birthday_p1 = i;same_birthday_p2 = j;break;
}

我在代码中将PERSON_NUM设为10和40的输出结果

PERSON_NUM

E(X)

结果

10

0.1232876712328767

没有相同生日的人

40

0.4931506849315068

有相同生日的人

房间中人数为40人时,出现生日相同的期望为1/2,而10人时期望仅为1/10.我输入两次得出生日的结果也与概率模型预期匹配。

球与箱子

问题描述:有b个箱子,往一个指定的箱子中投入球的概率为1/b,投出n个相同的求,指定箱子中有k个球,求k值的期望值。

k正好符合二项分布,b(n,1/b);  所以k的期望值E(K) = n/b.


总结

本文以雇佣问题,生日悖论和球与箱子问题入手,着重讲述如何使用概率方法分析随机算法。

相关文章:

概率分析和随机算法

目录 雇佣问题 概率分析 随机算法 生日悖论 随机算法 概率分析 球与箱子 总结 雇佣问题 有n个候选人面试&#xff0c;如果面试者比目前雇佣者的分数高&#xff0c;评价更好&#xff0c;那么就辞掉当前雇佣者&#xff0c;而去聘用面试者&#xff0c;否则继续面试新的候…...

15_2 Linux Shell基础

15_2 Linux Shell基础 文章目录 15_2 Linux Shell基础[toc]1. shell基本介绍1.1 什么是shell1.2 shell使用方式1.3 脚本的执行方式1.4 脚本练习 2. 变量的种类2.1 自定义变量2.2 环境变量&#xff0c;由系统提前定义好&#xff0c;使用时直接调用2.3 位置变量与预定变量2.4 变量…...

Catia装配体零件复制

先选中要复制的零件 然后选中复制到的父节点才可以。 否则 另外一种方法是多实例化...

实用小工具-python esmre库实现word查找

python esmre库实现word查找 前言&#xff1a; 在文本中匹配特定的字符串&#xff0c;一般可以用普通的字符串匹配算法&#xff0c;KMP算法&#xff1b; python中提供了一个库&#xff0c;esmre, 通过预先将字符串存到esm对象中&#xff0c;利用这些字符串从候选的字符串中进行…...

SSM框架整合,内嵌Tomcat。基于注解的方式集成

介绍&#xff1a; SSM相信大家都不陌生&#xff0c;在spring boot出现之前&#xff0c;SSM一直是Java在web开发中的老大哥。现在虽说有了spring boot能自动整合第三方框架了&#xff0c;但是现在市面上任然有很多老项目是基于SSM技术的。因此&#xff0c;能熟练掌握SSM进行开发…...

系统架构设计师【论文-2016年 试题4】: 论微服务架构及其应用(包括写作要点和经典范文)

论微服务架构及其应用&#xff08;2016年 试题4&#xff09; 近年来&#xff0c;随着互联网行业的迅猛发展&#xff0c;公司或组织业务的不断扩张&#xff0c;需求的快速变化以及用户量的不断增加&#xff0c;传统的单块(Monolithic)软件架构面临着越来越多的挑战&#xff0c;…...

面试题:String 、StringBuffer 、StringBuilder的区别

String、StringBuffer、和StringBuilder都是用于处理字符串的操作类&#xff0c;但它们之间存在一些关键性的差异&#xff1a; 1.不可变性与可变性&#xff1a; String&#xff1a;字符串常量&#xff0c;是不可变的。一旦创建&#xff0c;其内容就不能被改变。对字符串的任何…...

TLS指纹跟踪网络安全实践(C/C++代码实现)

TLS指纹识别是网络安全领域的重要技术&#xff0c;它涉及通过分析TLS握手过程中的信息来识别和验证通信实体的技术手段。TLS&#xff08;传输层安全&#xff09;协议是用于保护网络数据传输的一种加密协议&#xff0c;而TLS指纹则是该协议在实际应用中产生的独特标识&#xff0…...

小白学RAG:大模型 RAG 技术实践总结

节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。 汇总合集…...

Doris Connector 结合 Flink CDC 实现 MySQL 分库分表

1. 概述 在实际业务系统中为了解决单表数据量大带来的各种问题&#xff0c;我们通常采用分库分表的方式对库表进行拆分&#xff0c;以达到提高系统的吞吐量。 但是这样给后面数据分析带来了麻烦&#xff0c;这个时候我们通常试将业务数据库的分库分表同步到数据仓库时&#x…...

ModbusTCP、TCP/IP都走网线,一样吗?

在现代通信技术中&#xff0c;Modbus/TCP和TCP/IP协议是两种广泛应用于工业自动化和网络通信领域的协议。尽管它们都运行在网线上&#xff0c;但它们在设计、结构和应用场景上有着明显的区别。 Modbus/TCP协议是什么 Modbus/TCP是一种基于TCP/IP的应用层协议&#xff0c;它是Mo…...

网络学习(13)|Spring Boot中获取HTTP请求头(Header)内容的详细解析

文章目录 方法一&#xff1a;使用HttpServletRequest实现原理代码示例优点缺点适用场景 方法二&#xff1a;使用RequestContextHolder实现原理代码示例优点缺点适用场景 方法三&#xff1a;使用RequestHeader注解实现原理代码示例优点缺点适用场景 总结 在Spring Boot应用中&am…...

【漏洞复现】宏景eHR pos_dept_post SQL注入漏洞

0x01 产品简介 宏景eHR人力资源管理软件是一款人力资源管理与数字化应用相融合&#xff0c;满足动态化、协同化、流程化、战略化需求的软件。 0x02 漏洞概述 宏景eHR pos_dept_post 接囗处存在SQL注入漏洞,未经过身份认证的远程攻击者利用此漏洞执行任意SQL指令&#xff0c;…...

82. 删除排序链表中的重复元素 and II

链接直达&#xff1a; 保留重复元素 不保留重复元素 题目&#xff1a; 1: 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。示例 1&#xff1a;输入&#xff1a;head [1,1,2] 输出&#xff1a;[1…...

C++ 判断目标文件是否被占用(独占)(附源码)

在IM软件中发起文件发送时,如果要发送的是某word文件,并且该word文件被office打开,则会提示文件正在被占用无法发送,如下所示: 那文件被占用到底是如何判断出来的呢?其实很简单,调用系统API函数CreateFile,打开该文件(OPEN_EXISTING),传入FILE_SHARE_READ共享读标记…...

计划任务 之 一次性的计划任务

计划任务 作用:定时自动完成特定的工作 计划任务的分类&#xff1a; &#xff08;1&#xff09;一次性的计划任务 例如下周三对系统的重要文件备份一次 &#xff08;2&#xff09;周期性重复计划任务 例如每天晚上12&#xff1a;00备份一次 一次性的任务计划&#xff1a…...

非比较排序之计数排序

目录 一、什么是计数排序 二、思路 三、代码实现 一、什么是计数排序 计数排序是一种非比较型的排序算法&#xff0c;它通过统计待排序数据中每个元素出现的次数&#xff0c;然后根据这个次数来进行排序。计数排序的具体步骤如下&#xff1a; 首先找出待排序数据中的最大值…...

Django路由与会话深度探索:静态、动态路由分发,以及Cookie与Session的奥秘

系列文章目录 Django入门全攻略&#xff1a;从零搭建你的第一个Web项目Django ORM入门指南&#xff1a;从概念到实践&#xff0c;掌握模型创建、迁移与视图操作Django ORM实战&#xff1a;模型字段与元选项配置&#xff0c;以及链式过滤与QF查询详解Django ORM深度游&#xff…...

第7章 用户输入和 while 循环

第7章 用户输入和 while 循环 7.1 函数 input()的工作原理7.1.1 编写清晰的程序7.1.2 使用 int()来获取数值输入7.1.3 求模运算符 7.2 while 循环简介7.2.1 使用 while 循环7.2.2 让用户选择何时退出7.2.3 使用标志7.2.4 使用 break 退出循环7.2.5 在循环中使用 continue7.2.6 …...

xshell远程无法链接上VM的centos7

1、现象如下&#xff0c; 2.1解决办法&#xff1a;查证后发现这个默认的设置为vmnet0 2.2解决办法&#xff1a;重启win10的虚拟机网卡&#xff08;先禁用再启用&#xff09; 3.参考文章&#xff1a;Xshell连接不上虚拟机centos7_centos7的nat模式可以ping通网络,但是用xshell连…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...

DBLP数据库是什么?

DBLP&#xff08;Digital Bibliography & Library Project&#xff09;Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高&#xff0c;数据库文献更新速度很快&#xff0c;很好地反映了国际计算机科学学术研…...

MySQL的pymysql操作

本章是MySQL的最后一章&#xff0c;MySQL到此完结&#xff0c;下一站Hadoop&#xff01;&#xff01;&#xff01; 这章很简单&#xff0c;完整代码在最后&#xff0c;详细讲解之前python课程里面也有&#xff0c;感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...

Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践

在 Kubernetes 集群中&#xff0c;如何在保障应用高可用的同时有效地管理资源&#xff0c;一直是运维人员和开发者关注的重点。随着微服务架构的普及&#xff0c;集群内各个服务的负载波动日趋明显&#xff0c;传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...