模拟、枚举与贪心第一节

文章探讨了如何使用模拟方法解决机器翻译中的词典查找问题,提出了几种不同的内存管理策略。此外,文章还涉及优化枚举技巧在解决地毯铺设、找最大正方形、回文日期检查以及学生成绩排序等问题上的应用,并介绍了数列求和与数列修改问题的高效解决方案,如前缀和与差分数组的概念。
摘要由CSDN通过智能技术生成

模拟:

模拟:将要求分为一类一类的操作再让电脑去完成

1. 多项式输出

2. 机器翻译:阅读文章时查找词典问题(替换采用FIFO),类似于计算机外存与内存的缺页与替换

   第一思路:设置大小为n的数组作为内存,设置计数器对数组大小区域决定替换哪个

   - 解法1:设置单词标记数组vis,vis的值不等于0时为进入时间并同时做标记,int position记录最早的元素位置
     - 可能存在的问题:单词号是非负整数,可能是0
   - 解法2:设置长数组,内存数组在长数组上逐渐移动,查找时从最后往前寻找n个长度(内存范围)即可;用flag判断是否存在,若存在continue;若不存在内存数组延长数组往后移动一个元素,新进入长数组的元素视为调入内存中的元素
     - 可能存在的问题:程序开始内存无单词时,查找应该从数组第一位开始而非(长数组最后一位-内存长度)开始
   - 解法3:将flag换成标记数组
     - 可能存在的问题:注意内存中单词大于容量的时候才开始替换

枚举:

一一列举,不重不漏

- 优化枚举的基本思路:减少枚举次数
  1. 选择合适的枚举对象
  2. 选择合适的枚举方向---方便排除非法和不是最优的情况
  3. 选择合适的数据维护方法---转化问题

1. 铺地毯

   第一思路:最终要求的点已经提前给出,所以只需看最后是哪张地毯覆盖过这个点即可

   - 解法:遍历记录最后覆盖这个点的地毯;但可以尝试直接逆向寻找第一个覆盖这个点的地毯

2. 最大正方形

   第一思路:遍历每一个#号作为正方形的左上顶点,再往后遍历找到另一个#号作为正方形的另一个顶点;两个定点确定之后正方形的四个顶点便都确认了,判断剩余的两个点是否存在即可

   - 解法:确定左上顶点与右上顶点,再通过找出正方形中心与全等三角形等几何方式推断坐标

3. 回文日期

   第一思路:先用双指针判断是否是回文数,再通过翻转年份判断月、日是否存在;遍历日期的时候只需要遍历年份即可,月日是年份翻转来的而不用以天为单位遍历

4. 同学的成绩

   第一思路:把同学成绩排序,询问时遍历

   - 解法:建立一分一段表,累计求和算名次

5. 数列求和问题(问题4延伸)

   引入前缀和概念,把对区间的查询改为对区间端点的查询

6. 数列修改问题

   引入差分数组概念,修正数据使用  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值