贪心算法(算法篇)

算法之贪心算法

贪心算法

概念

  • 贪心算法是一种思想,并不是一种算法,贪心算法是分阶段地工作,在每一个阶段,可以认为所作决定是好的,而不考虑将来地后果。
  • 算法的每个阶段总是选择当前阶段最优,这种策略希望当算法终止时,能够将每一次的局部最优变成全局最优。

调度问题

概念

  • 调度问题就是安排一个完成任务的顺序使得全部任务完成的平均完成的时间能够最小化

单个处理器

  • 调度任务的方式我们一般使用非预占调度一旦开始一个任务,就必须将这个任务运行到完成
  • 调度问题一般都是最短任务最先进行,这样将会产生出每个阶段最优的调度,使得达到全局最优的调度。
  • 操作系统调用程序一般把优先权赋予那些更短的任务。

多处理器

  • 如果我们有多个处理器,并且任务是有序的(按照最短时间排序),这个时候的任务调度问题需要进行小部分的改变,但跟单个处理器的思想是一样的
  • 假设我们有p个处理器,则我们选择前p个任务分配给各个处理器各一个,然后第p+1任务分配给第一个处理器,然后后面的就是按照这个规则分配。
  • 第二个最优解,是将任务分组分配给各个处理器,且任务个数能整除处理器个数,是对于0<=i<N/p,p为处理器个数,N为任务总数,i为处理器序号,我们从任务i*p+1直到任务(i+1)*p的每个任务放到编号为i的处理器中。

Huffman编码

概念

  • 哈夫曼(Huffman)编码是一种压缩文件的编码,根据文件出现的字符使用一种将数据存在树叶上的二叉树来表示每个字符的二进制代码
  • 每个字符通过从根节点开始用0指示左分支用1表示右分支而以记录路径的方法表示出来。如果字符ci在深度di处并且出现fi次,那么该字符代码的值为对difi的求和。
  • 一个最优的哈夫曼编码是一种满二叉树所有的节点或者是树叶,或者有两个子节点。
  • 而贪心算法在这里就是根据字符出现的频率找出总价值最小的满二叉树,其中所有字符位于树叶。就是将出现次数少的放在深度深的地方(编码位数较多),将出现最多放在最浅的地方(编码位数较少)
  • 例如图10-9,字符a压缩后所表示的二进制代码为000

image

哈夫曼算法

  • 为了生成最优的哈夫曼编码树,哈夫曼提出了哈夫曼算法,这个算法也是使用了贪心的策略
  • 假设字符个数为C,算法的描述如下:算法对一个由树组成的森林进行。一棵树的权等于它的树叶(字符)的频率的和任意选取最小权的两棵树T1和T2,并任意形成以T1和T2为子树的新树将这样的过程进行C-1次。在算法的开始存在C课单节点树–每个字符一颗树。在算法结束时得到一棵树,这棵树就是最优哈夫曼编码树。

实现代码:

//树的结构体
struct tree{char data;   //存字符tree* left;tree* right;int weight;    //权重
};//用来定义优先队列的比较规则
struct cmp{bool operator()(tree *a, const tree* b){return a->weight<b->weight;}
};//需要将数据先存入优先队列中
priority_queue<tree*,vector<tree*>,cmp>pq;tree* createNode(char data,int weight){tree* p=new tree;p->data=data;p->left= nullptr;p->right= nullptr;p->weight=weight;return p;
}tree* merge(tree* &t1,tree* &t2){int n=t1->weight+t2->weight;tree* p= createNode(0,n);p->left=t1;p->right=t2;return p;
}tree* Huffman(){tree* p;while (!pq.empty()){tree* t1=pq.top();pq.pop();tree* t2=pq.top();pq.pop();p=merge(t1,t2);pq.push(p);}return p;
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kafka Producer之数据重复和乱序问题

文章目录 1. 数据重复2. 数据乱序 为了可靠性&#xff0c;Kafka有消息重试机制&#xff0c;但是同时也带来了2大问题 1. 数据重复 消息发送到broker后&#xff0c;broker记录消息数据到log中&#xff0c;但是由于网络问题&#xff0c;producer没有收到acks&#xff0c;于是再次…

Axure设计之轮播图(动态面板+中继器)

轮播图&#xff08;Carousel&#xff09;是一种网页或应用界面中常见的组件&#xff0c;用于展示一系列的图片或内容&#xff0c;通常通过自动播放或用户交互&#xff08;如点击箭头按钮&#xff09;来切换展示不同的内容。轮播图能够吸引用户的注意力&#xff0c;有效展示重要…

新手小白的pytorch学习第十一弹-----Computer Vision创建基础模型使用FashionMNIST

目录 PyTorch Computer Vision0 PyTorch 中 Computer vision 的库1 获得一个数据集1.1 查看数据的输入和输出形状1.2 可视化数据 2 准备 DataLoader3 Model 0: 创建一个 baseline model3.1 设置损失函数、优化器和评估指标3.2 创建一个函数来给我们的实验计时3.3 在批量数据集上…

萝卜快跑:自动驾驶的先锋与挑战

萝卜快跑&#xff1a;自动驾驶的先锋与挑战 近段时间&#xff0c;由萝卜快跑引发的自动驾驶事件如火如荼&#xff0c;成为科技领域的热门话题。萝卜快跑作为自动驾驶领域的重要参与者&#xff0c;其最新事件引发了广泛的关注和讨论。 萝卜快跑是百度推出的自动驾驶出行服务平台…

20240724-然后用idea创建一个Java项目/配置maven环境/本地仓储配置

1.创建一个java项目 &#xff08;1&#xff09;点击页面的create project&#xff0c;然后next &#xff08;2&#xff09;不勾选&#xff0c;继续next &#xff08;3&#xff09;选择新项目名称&#xff0c;新项目路径&#xff0c;然后Finsh&#xff0c;在新打开的页面选择…

Hadoop、Hive、HBase、数据集成、Scala阶段测试

姓名&#xff1a; 总分&#xff1a;Hadoop、Hive、HBase、数据集成、Scala阶段测试 一、选择题&#xff08;共20道&#xff0c;每道0.5分&#xff09; 1、下面哪个程序负责HDFS数据存储&#xff08; C &#xff09; A. NameNode B. Jobtracher C. DataNode D. Sec…

鸿蒙界面开发

界面开发 //构建 → 界面 build() {//行Row(){//列Column(){//文本 函数名(参数) 对象.方法名&#xff08;参数&#xff09; 枚举名.变量名Text(this.message).fontSize(40)//设置文本大小.fontWeight(FontWeight.Bold)//设置文本粗细.fontColor(#ff2152)//设置文本颜色}.widt…

3.JAVA-IDEA

IDEA介绍 下载安装 实际操作 免费试用&#xff0c;可以选第一个自己找到密匙开锁 首先新建project项目 建立空项目 起名并存储位置选择 确定创建项目 成功新建项目&#xff0c;开始新建模块 新建或导入模块 新建java模块 修改名称&#xff0c;位置保持默认 同样yes建立 ok即可 …

2 YOLO8的使用

1 介绍 YOLOv8是YOLO (You Only Look Once) 目标检测模型系列的最新版本&#xff0c;由Ultralytics公司开发和维护。YOLOv8是在先前版本的基础上进行的重大更新&#xff0c;不仅提升了性能&#xff0c;还增加了更多的功能&#xff0c;它不仅能够进行目标检测&#xff0c;还能完…

职业教育综合布线实验实训室建设应用案例

在信息技术迅猛发展的今天&#xff0c;综合布线技术已成为智能建筑、数据中心等基础设施不可或缺的一部分。唯众&#xff0c;作为职业教育领域的先行者&#xff0c;早在多年前便洞悉行业趋势&#xff0c;率先涉足综合布线实训室的建设&#xff0c;凭借丰富的经验和持续的创新&a…

phpstorm配置xdebug3

查看php路径相关信息 php --ini安装xdebug https://www.jetbrains.com/help/phpstorm/2024.1/configuring-xdebug.html?php.debugging.xdebug.configure php.ini 配置 在最后添加&#xff0c;以下是我的配置 [xdebug] zend_extension/opt/homebrew/Cellar/php8.1/8.1.29/p…

决策树 和 集成学习、随机森林

决策树是非参数学习算法&#xff0c;可以解决分类问题&#xff0c;天然可以解决多分类问题&#xff08;不同于逻辑回归或者SVM&#xff0c;需要通过OVR&#xff0c;OVO的方法&#xff09;&#xff0c;也可以解决回归问题&#xff0c;甚至是多输出任务&#xff0c;并且决策树有非…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十一章 添加设备树节点

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

通过4G模块EC600N向阿里云物联网平台物模型上面发送字符串,现在发送int数据是成功的,发送字符串就是不成功

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

轻量化YOLOv7系列:结合G-GhostNet | 适配GPU,华为诺亚提出G-Ghost方案升级GhostNet

轻量化YOLOv7系列&#xff1a;结合G-GhostNet | 适配GPU&#xff0c;华为诺亚提出G-Ghost方案升级GhostNet 需要修改的代码models/GGhostRegNet.py代码 创建yaml文件测试是否创建成功 本文提供了改进 YOLOv7注意力系列包含不同的注意力机制以及多种加入方式&#xff0c;在本文…

【Python】Facebook开源时间序列数据预测模型Prophet

文章目录 一、简介二、项目的文件解读三、Prophet类主要方法和参数3.1 主要参数3.2 主要方法 四、用法示例 一、简介 Prophet 是由 Facebook 开发的一个开源工具&#xff0c;用于时间序列数据的预测。它特别适用于处理具有强季节性和趋势的时间序列数据&#xff0c;并且对节假…

大数据之Oracle同步Doris数据不一致问题

数据同步架构如下&#xff1a; 出现的问题&#xff1a; doris中的数据条数 源库中的数据条数 总数完全不一致。 出现问题的原因&#xff1a; 在Dinky中建立表结构时&#xff0c;缺少对主键属性的限制 primary key(ID) not enforced 加上如上语句&#xff0c;数据条数解决一致 …

App Instance 架构示例

前言 在Unity程序设计过程中&#xff0c;我们处理的第一个对象是Application Instance。 它的主要职责是启动流程管理、卸载流程管理&#xff0c;次要职责是管理在内部的子系统生命周期。其他职责&#xff0c;提供或桥接应用程序的配置信息、及其他第三方接口。 它通常以单例的…

51单片机嵌入式开发:18、STC89C52RC嵌入式DS1302实时时钟实验及数码管显示

STC89C52RC嵌入式DS1302实时时钟实验及数码管显示 STC89C52RC嵌入式DS1302实时时钟实验及数码管显示1 概述1.1 DS1302简介1.2 DS1302功能和特点1.3 DS1302工作原理1.4 DS1302应用领域 2 DS1302设计原理2.1 引脚说明2.2 寄存器说明及使用&#xff08;1&#xff09;命令cmd字节说…

【PPT把当前页输出为图片】及【PPT导出图片模糊】的解决方法(sci论文图片清晰度)

【PPT把当前页输出为图片】及【PPT导出图片模糊】的解决方法 内容一&#xff1a;ppt把当前页输出为图片&#xff1a;内容二&#xff1a;ppt导出图片模糊的解决方法&#xff1a;方法&#xff1a;步骤1&#xff1a;打开注册表编辑器步骤2&#xff1a;修改注册表&#xff1a; 该文…