贪心选择性质的证明

1、贪心选择性质:在求解一个最优化的过程中,使用贪心的方式选择了一组内容之后,不会影响下面的子问题的求解。

 

2、

如果无法使用贪心性质,只需要举出一个反例就可以了

 

 

3、比如0-1背包问题

但是这个问题将1号物品和2号物品放进背包,最终得到的价值是10+12=22,这样一个反例就告诉我们贪心算法不成立

4、

直觉解法就是把比这个数小的最大的完全平方数加进这个数中,比如对于12来说,最大的完全平方数是9,剩下的事情是凑3,那么比3小的最大的完全平方数就是1,最终使用贪心的算法求解出12=9+1+1+1,一共使用了4个完全平方数,可是,12可以使用3个4来表示,那么,这个反例就告诉我们,贪心算法是不成立的。对于这两个问题来说,可以说是不包含贪心选择性质的。

 

5、

如果在算法领域,遇到了需要使用数学证明的问题,通常首先想到的是使用两种方式,这两种方式分别是数学归纳法和反证法。数学归纳法相当于是递推的过程,就像动态规划的过程,将基本的问题解决之后,假设规模为n的问题可以解决,就能推导出规模为n+1这样的问题。对于数学归纳法所适用的领域,通常都是有一个变量n在逐渐增加的过程。对于现在这个问题,显然不是这样的。另外一种在数学领域经常使用的就是反证法,所谓反证法就是假设它不正确,然后看可不可能推导出矛盾。

 

6、

 

 

 

7、

8、

 

### Dijkstra算法中的贪心选择性质证明 #### 定义与前提条件 Dijkstra算法通过逐步扩展已知最短路径集合来解决问题。对于给定的加权有向图G=(V,E),其中V表示顶点集,E表示边集,设d[u]代表从起点s到u的距离估计值。 #### 贪心选择性质描述 当从未处理过的节点集中选取具有最小临时距离标记的节点v作为当前节点时,此时d[v]=δ(s,v)(即d[v]等于实际最短路径长度)[^1]。 #### 证明过程 为了验证上述断言的有效性,采用反证法来进行说明: - **假设** 存在一个更优的选择w使得δ(s,w)< d[w], 并且在访问v之前应该先访问w。 - 如果确实存在这样的w, 那么意味着在更新所有邻居节点之后,仍然可以找到一条比现有记录更好的到达这些邻近节点的道路。这显然违背了算法每次迭代都选出局部最优解的原则——因为如果真的有这样的情况发生,那么原本就不应当把v加入到最终确认队列里去;相反地,应优先考虑那些能够带来更低总成本的新候选者们[^4]。 - 此外,考虑到一旦某个顶点被正式纳入S(已完成计算其确切最短路的一组定点),它就不会再受到后续操作的影响而改变状态。换句话说,在任何时刻,只要某条通往特定终点p的最佳路线已经被固定下来,就不再可能由于其他未探索区域的存在而导致这条线路失效或变差。这一特性同样适用于本场景下的v和假想的竞争对象w之间的关系判定上[^3]。 综上所述,基于以上论述可知,不存在违反贪心策略的情况出现,从而完成了对Dijkstra算法中所体现出来的贪婪决策机制合理性的论证工作。 ```python def dijkstra(graph, start): import heapq n = len(graph) dist = [float('inf')] * n visited = set() pq = [(0, start)] while pq: (distance, current_vertex) = heapq.heappop(pq) if current_vertex not in visited: visited.add(current_vertex) for neighbor, weight in graph[current_vertex].items(): old_dist = dist[neighbor] new_dist = distance + weight if new_dist < old_dist and neighbor not in visited: dist[neighbor] = new_dist heapq.heappush(pq, (new_dist, neighbor)) return dist ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值