贪心算法的思想

贪心算法的思想

贪心算法的基本思想是找出整体当中每个小的局部的最优解,并且将所有的这些局部最优解合起来形成整体上的一个最优解。因此能够使用贪心算法的问题必须满足下面的两个性质:

1.整体的最优解可以通过局部的最优解来求出;

2.一个整体能够被分为多个局部,并且这些局部都能够求出最优解。使用贪心算法当中的两个典型问题是活动安排问题和背包问题。

 在对问题求解时,总是作出在当前看来是最好的选择。也就是说,不从整体上加以考虑,它所作出的仅仅是在某种意义上的局部最优解(是否是全局最优,需要证明)。

特别注意: 若要用贪心算法求解某问题的整体最优解,必须首先证明贪心思想在该问题的应用结果就是最优解!!

以经典的活动安排为例:

1、若AE的最优解,那么E-A 也是问题的最优解,在余下的问题里,继续拿最早结束的;

2、拿可以开始的最早结束。(所以要按结束时间排序一次,然后把可以开始的选择上,然后继续向后推)

贪心子结构是独立的(往往用标志判断而已),不同于动态规划(后面每一边的计算要用到前一步的值,另外开辟空间来保存)

 贪心算法的基本步骤

1、从问题的某个初始解出发。

2、采用循环语句,当可以向求解目标前进一步时,就根据局部最优策略,得到一个部分解,缩小问题的范围或规模。

3、将所有部分解综合起来,得到问题的最终解。

### 贪心算法在程序存储问题中的应用 #### 应用场景描述 在程序存储问题中,贪心算法可以用于解决内存分配、缓存替换等问题。这类问题的目标通常是最大化资源利用率或最小化访问延迟。当面对有限的物理内存时,操作系统需要决定哪些页面应该驻留在内存中以及何时加载新页面。 #### 原理阐述 贪心策略在此类问题上的核心在于每次决策都试图使当前状态达到最优解。具体来说: - 对于**内存管理**而言,采用类似于最不经常使用(LFU) 或最近最少使用(LRU) 的置换算法能够体现贪心思想[^1]。 LRU假设未来不再会频繁访问过去很久未被使用的数据项;LFU则关注频率而非时间间隔。这两种方法都在尝试基于历史行为预测未来的访问模式,并据此作出即时的最佳选择。 - **文件系统缓冲区管理**同样适用此原则。例如,在读取大文件的过程中,如果磁盘I/O速度远低于CPU处理能力,则可以通过预读机制提前加载后续可能需要用到的数据块到高速缓存中去。这种做法减少了实际发生I/O操作次数从而提高了效率[^2]。 ```python def lru_cache_eviction(cache, new_item): if len(cache) >= cache.capacity and not (new_item in cache): least_recently_used = min(cache.items(), key=lambda item: item.last_access_time) del cache[least_recently_used.key] add_to_cache(cache, new_item) def add_to_cache(cache, item): if item not in cache: cache[item.key] = item.value update_last_access(item) ``` 上述代码展示了LRU缓存淘汰逻辑的一个简化版本。每当有新的项目加入而缓存已满时,就会移除最后访问时间最早的条目以腾出空间给新成员。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值