贪心算法——python

给定一个字符串 s ,检查是否能重新排布其中的字母,使得两相邻的字符不同。

返回 s 的任意可能的重新排列。若不可行,返回空字符串 "" 。

一:基于最大堆的贪心

每次使出现次数最多的两个字符成对出现,一个消耗完了就顺位使用下一个字符,直到所有字符全排列完

        if len(s) < 2:

            return s

        length = len(s)

        counts = collections.Counter(s)//统计出现次数,返回字典格式

        maxCount = max(counts.items(), key=lambda x: x[1])[1] //lambda表达式(匿名函数)这里是实现取出所有的value值,然后找max

        if maxCount > (length + 1) // 2://最多次的字母大于(n+1)/2,则无法使相邻两个不同

            return ""

        

        queue = [(-x[1], x[0]) for x in counts.items()]

        heapq.heapify(queue) //heapq库参考:

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
贪心算法是一种解决实际问题的常用方法,也可用于解决TSP问题。在TSP问题中,贪心算法的思路是每次选择当前看来最好的选择,而不考虑整体最优解。具体来说,在TSP问题中,贪心算法可以按以下步骤实现: 1. 使用直角坐标系表示各个城市的位置,其中起点为(0, 0)。并计算出所有点到点之间的距离数组,称为map。 2. 从起点(0, 0)出发,选择距离最近的城市作为下一个要访问的城市。 3. 从该城市出发,再选择距离最近的未访问城市作为下一个要访问的城市。重复该步骤,直到访问完所有的城市。 4. 返回起点,完成一次遍历。这就是贪心算法在TSP问题中的一种实现。 通过这种贪心算法实现,可以得到一个近似的最优解,但不能保证得到整体最优解。需要注意的是,贪心算法的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关。 以上就是使用贪心算法解决TSP问题的一种python实现方法。其他解决TSP问题的方法还包括动态规划算法、分支限界法、蚁群算法、遗传算法、A*等。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [用Python解决TSP问题(1)——贪心算法](https://blog.csdn.net/h9f3d3/article/details/80806699)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [TSP(旅行商问题) 贪心、爬山、退火算法的python解决方案](https://blog.csdn.net/zw17302560727/article/details/122304577)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值