python算法指南程序员经典,python算法教程pdf百度云

本文介绍了如何使用Python实现贪心算法解决活动安排问题,通过总是选择结束时间最早的活动来最大化教室使用效率。通过bubble_sort和greedy_activity函数,给出了具体步骤和代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家好,本文将围绕你也能看懂的python算法书 pdf展开说明,python算法教程这本书怎么样是一个很多人都想弄明白的事情,想搞清楚python算法指南程序员经典需要先了解以下几个事情。

今天我们继续来使用贪心算法解决一道经典问题——活动安排问题。

学校的阶梯教室经常开展各类活动,活动开始和结束的时间都不一样,有可能会出现重叠,我们需要怎样安排才能尽可能多的开展活动呢python编程代码画爱心

问题描述:

活动信息表如上所示,我们如何安排才能尽可能多的开展活动呢?

为了解决上述问题,我们可以考虑本章介绍的贪心算法。

目标是在固定的教室中尽量多地安排活动, 可以考虑的贪心策略有总是选择最早开始的、总是选择时间最短的、总是选择与其他活动冲突最少的、总是选择结束时间最早的。

在这里,我们用总是选择结束时间最早的活动这一选择方案作为解题的贪心策略,后面的证明部分会验证该策略符合贪心选择性质和最优子结构性质。

    def bubble_sort(s,f):
        for i in range(len(f)):
            for j in range(0,len(f)-i-1):
                if f[j] > f[j+1]:
                    f[j],f[j+1] = f[j+1],f[j]
                    s[j],s[j+1] = s[j+1],s[j]
        return s,f


    def greedy_activity(s,f,n):
        a = [True for x in range((n))]
        j = 0
        for i in range(1,n):
            if s[i] >= f[j]:
                a[i] = True
                j = i
            else:
                a[i] = False
        return a


    n = int(input("输入活动数量和起始时间(数量和活动用回车分割,活动之间用空格分隔)"))
    arr = input().split()
    s = []
    f = []
    for ar in arr:
        ar = ar[1:-1]
        start = int(ar.split(',')[0])
        end = int(ar.split(',')[1])
        s.append(start)
        f.append(end)


    s,f = bubble_sort(s,f)
    G = greedy_activity(s,f,n)


    res = []
    for t in range(len(G)):
        if G[t]:
            res.append('({},{})'.format(s[t],f[t]))
    print(' '.join(res))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值