【NC16589】机器翻译

题目

机器翻译

先进先出 ( F I F O ) (FIFO) (FIFO) 的内存置换算法、队列、哈希表

思路

题目很直观,有一个大小受限的内存,如果内存没装满就装,装满了则将最先装入的那一块换掉,再装新的。

这是一种先进先出 ( F I F O ) (FIFO) (FIFO) 的模式,使用队列来模拟再合适不过了。

不过题目又提到在装入内存之前还要先判断一下内存中是否已经存在,如果存在的话就忽略,否则再装。

如果使用队列的话,判断某个元素是否在队列中需要的时间复杂度为 O ( n ) O(n) O(n),这显然不是一种好的算法,所以引入哈希集合来进行优化。

总体思路就是:

  1. 设置一个计数值,初始为 0
  2. 读入一个元素,判断其是否在哈希集合中(这个操作的时间复杂度很低,可近似看作 O ( 1 ) O(1) O(1)
    2.1 如果在,则忽略
    2.2 如果不在,则将其加入哈希集合和队列:如果队列不满,则直接加入;如果队列已满,则先将队首元素移出哈希集合,然后再将队首元素出队,然后再将当前元素入队,并将计数值加一
  3. 重复这个操作直到数据读取完毕。
  4. 输出计数值

注意

队列和哈希集合可以使用 STL 封装的。但既然是学习,何不自己手搓呢?正好练习一下循环队列。至于哈希集合,这道题的数据很小,直接用数组模拟即可(数据如果很大的话使用库封装的哈希集合比自己手搓的好用)

代码

// 纯C语言
#include <stdio.h>
#define N 1005
#define M 105// 注意C语言中全局变量是会自动初始化为0的
int q[M], h, r;  // 队列及其头尾指针,初始 h = r = 0
int set[N];      // 哈希集合,初始全为0,表示没有元素int main(void) {int n = 0, m = 0, x = 0, ans = 0;scanf("%d%d", &m, &n);while (n--) {scanf("%d", &x);if (!set[x]) {// 如果哈希表中不存在,则说明要到外存中找,答案加一ans++;// 加入队列和哈希表set[x] = 1;if ((r + 1) % (m + 1) == h) {// 如果队列是满的,则要先将队首元素出队// 不过在这之前要先将哈希表中的元素删除set[q[h++]] = 0;// 循环if (h == m + 1) h = 0;}// 不管队列是不是满的,都要将当前元素入队// 新元素加入队列q[r++] = x;// 循环if (r == m + 1) r = 0;}}printf("%d\n", ans);return 0;
}

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

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

相关文章

基于SWAT-MODFLOW地表水与地下水耦合实践技术教程

原文链接&#xff1a;基于SWAT-MODFLOW地表水与地下水耦合实践技术教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247598169&idx3&sn16d726694ca77f9cda3aa95716a18cc1&chksmfa8201becdf588a846bc1d461b8c985536e6191e7288df035e5bef6fc85b933030f…

【二分查找】算法例题

目录 十八、二分查找 114. 搜索插入位置 ① √- 115. 搜索二维矩阵 ② 116. 寻找峰值 ② √- 117. 搜索旋转排序数组 ② 118. 在排序数组中查找元素的第一个和最后一个位置 ② √ 119. 寻找寻钻排序数组中的最小值 ② 120. 寻找两个正序数组的中位数 ③ 136. 直线上最多…

顺序表的动态分配基本操作

#include <stdio.h> #include <stdlib.h>// 顺序表存储空间动态分配 #define InitSize 10 // 顺序表初始长度 typedef int ElemType; // int类型重命名为ElemType&#xff0c;方便后续调整typedef struct { // 定义结构体ElemType *data; // 用静…

Rust Rocket简单入门

简介 Rust中最知名的两个web框架要数Rocket和Actix了&#xff0c;Rocket更注重易用性&#xff0c;Actix则更注重性能。这里只是了解一下Rust下的WebAPI开发流程&#xff0c;就学一下最简单的 Rocket。 Rocket 是一个用于 Rust 的异步 Web 框架&#xff0c;专注于可用性、安全性…

找工作的经验总结一——渠道与简历

关于简历与面试的经验总结&#xff0c;也可以说是关于找工作的方法论。 这里我们用第一性原理的方法论来分析找工作这件事。 首先&#xff0c;我们的目的是什么&#xff1f; 当然是找工作&#xff0c;不论你是大学刚毕业&#xff0c;还是创业失败&#xff0c;或者是在家闲着…

python网络爬虫实战教学——urllib的使用(1)

文章目录 专栏导读1、前言2、urllib的使用3、发送请求3.1 urlopen3.2 request 专栏导读 ✍ 作者简介&#xff1a;i阿极&#xff0c;CSDN 数据分析领域优质创作者&#xff0c;专注于分享python数据分析领域知识。 ✍ 本文录入于《python网络爬虫实战教学》&#xff0c;本专栏针对…

113 链接集10--ctrl+左键单击多选

1.ctrl+左键单击多选,单击单选 精简代码 <div class="model-list"><div@mousedown.prevent="handleClick(item, $event)"class="model-list-item"v-for="item in modelList":key="item.id":class="{ model-a…

[leetcode] 45. 跳跃游戏 II

文章目录 题目描述解题方法贪心java代码复杂度分析 题目描述 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0…

C语言例3-28:位逻辑运算的例子

一、计算机中数值的表示 1. 二进制位与字节 计算机的内存是由许多称为字节的单元组成的。1字节由8个二进制位&#xff08;bit&#xff09;组成。每个二进制位的值为0或1。最右端的一位称为“最低位”&#xff0c;编号为0&#xff1b;最左端的一位称为“最高位”&#xff0c;编…

重装系统后鼠标识别不了咋办

不知道大家在重装系统时,有没有遇到过系统重装完成后,鼠标不能使用的情况。在这种情况下,我们要怎么操作电脑解决这个问题呢?今天就跟大家分享重装系统后鼠标识别不了咋办。 一、主板没有设置兼容usb 在重装系统时,如果主板没有设置兼容usb,就会出现鼠标使用不了的现象。…

模拟计算机和数字计算机

抽象符号只是对现实世界的描述而非模拟&#xff0c;这种描述的还原依赖于人脑对自然世界的物理共识&#xff0c;当你说 “这是山” 这三个简单的字时&#xff0c;听者会还原出一座大山的具象… 人们早在 70 多年前就习惯了以二进制 0 和 1 为基础的数字逻辑&#xff0c;开启了数…

【Docker】-- 如何安装docker

一、安装docker 首先要安装一个yum工具 yum install -y yum-utils 安装成功后&#xff0c;执行命令&#xff0c;配置Docker的yum源&#xff1a; yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 最后&#xff0c;执行命令&#x…

XJLS-84/620静态双位置继电器 DC220V 带柜内板前接线底座 JOSEF约瑟

XJLS-84系列静态双位置继电器 系列型号&#xff1a; XJLS-84/023A静态双位置继电器; XJLS-84/132A静态双位置继电器; XJLS-84/203静态双位置继电器; XJLS-84/222A静态双位置继电器; XJLS-84/312A静态双位置继电器; XJLS-84/502静态双位置继电器; XJLS-84/440静态双位置继电器; …

vue3 elementPlus 设置树形报错时 setCheckedKeys of undefined

第一种解决方法 nextTick(async ()>{ treeRef.value!.setCheckedKeys(rows.permissionIds, false) }) 第一种解决方法 onMounted(async () > { treeRef.value!.setCheckedKeys([3], false) }&#xff09;

基于Springboot的高校竞赛管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的高校竞赛管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

Chart-based Reasoning: Transferring Capabilities from LLMs to VLMs

Chart-based Reasoning: Transferring Capabilities from LLMs to VLMs 相关链接&#xff1a;arXiv 关键字&#xff1a;Vision-language models、ChartQA、multimodal reasoning、fine-tuning、synthetic data 摘要 本文提出了一种技术&#xff0c;将大型语言模型&#xff08;…

免费录音软件大集合,轻松录制高品质音频

“有没有免费的录音软件推荐呀&#xff1f;最近我在制作一个关于环境保护的宣传片&#xff0c;需要录制一些大自然的声音。但是我发现自己并不擅长录音&#xff0c;甚至不知道如何开始。希望有人能推荐一些免费且易用的录音软件&#xff0c;感激不尽&#xff01;” 在当今信息…

Grid数据增强算法

算法原理 class Grid(object):def __init__(self, d1, d2, rotate1, ratio0.5, mode0, prob0.8):self.d1 d1self.d2 d2self.rotate rotateself.ratio ratioself.mode modeself.st_prob self.prob probdef set_prob(self, epoch, max_epoch):self.prob self.st_prob …

基于深度学习的场景文本检测

CTPN 简介&#xff1a; 基于目标检测方法的文本检测模型&#xff0c;在Faster RCNN的基础上进行了改进&#xff0c;并结合双向LSTM增强了序列提取特征&#xff0c;通过anchor和gt的设计将文本检测任务转化为一连串小尺度文本框的检测。 解决问题&#xff1a; 文本长短不一&…

全球首位AI程序员是否会抢走程序员饭碗

目录 1.概述 2.AI程序员的优势分析 2.1.减少人为错误 2.2.提高开发效率 2.3.代码质量提高 ​​​​​​​2.4.智能调试和测试 ​​​​​​​2.5.需求理解和管理 ​​​​​​​2.6.优化项目管理 ​​​​​​​2.7.知识共享与复用 ​​​​​​​2.8.小结 3.AI程序…