部门优化

问题:

某公司内有 4 个项⽬组,项⽬组 A、B、C、D,项⽬组A现有10⼈,项⽬组B现有7⼈,项⽬组C现 有5⼈, 项⽬组D现有4⼈。为了实现跨项⽬组协作,公司决定每⽉从⼈数最多的项⽬组中抽调 3 ⼈ 出来,到其他剩下 3 组中,每组 1 ⼈,这称之为⼀次调整优化(亦即经过第⼀次调整后,A组有7 ⼈,B组有8⼈,C组有6⼈,D组有5⼈)。 那么请问,经过⼗年的优化调整后,各项⽬组各有⼏⼈? 编程求解该问题,并思考是否为最优解。

分析:

从题目可知,思路就是找出ABCD四个项目组中哪个项目组人最多,将人数减3,其他三个部门各自加1,每月优化

一次,十年就是120次。

代码:

# -*- coding: utf-8 -*-
'''
某公司内有 4 个项⽬组,项⽬组 A、B、C、D,项⽬组A现有10⼈,项⽬组B现有7⼈,项⽬组C现 有5⼈,
项⽬组D现有4⼈。为了实现跨项⽬组协作,公司决定每⽉从⼈数最多的项⽬组中抽调 3 ⼈
出来,到其他剩下 3 组中,每组 1 ⼈,这称之为⼀次调整优化(亦即经过第⼀次调整后,A组有7
⼈,B组有8⼈,C组有6⼈,D组有5⼈)。
那么请问,经过⼗年的优化调整后,各项⽬组各有⼏⼈?
编程求解该问题,并思考是否为最优解。
'''
class Solution:
    def result(self,year):
        project_dic = {
            'A':10,
            'B':7,
            'C':5,
            'D':4
        }
        for i in range(12*year):
            max_Value = self.get_MaxValueDic(project_dic)
            self.optimization(project_dic,max_Value)
            print(f'第{i+1}月优化后:{project_dic}')

    def optimization(self,ori_dic,max_Value):
        for k in ori_dic.keys():
            if k==max_Value:
                ori_dic[k]=ori_dic[k]-3
            else:
                ori_dic[k]=ori_dic[k]+1

    def get_MaxValueDic(self,target_dic):
        for k,v in target_dic.items():
            if v == max(target_dic.values()):
                return k

if __name__=="__main__":
    s = Solution()
    s.result(10)

结果:

第1月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5}
第2月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6}
第3月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7}
第4月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8}
第5月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5}
第6月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6}
第7月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7}
第8月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8}
第9月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5}
第10月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6}
第11月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7}
第12月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8}
第13月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5}
第14月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6}
第15月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7}
第16月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8}
第17月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5}
第18月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6}
第19月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7}
第20月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8}
第21月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5}
第22月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6}
第23月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7}
第24月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8}
第25月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5}
第26月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6}
第27月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7}
第28月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8}
第29月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5}
第30月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6}
第31月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7}
第32月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8}
第33月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5}
第34月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6}
第35月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7}
第36月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8}
第37月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5}
第38月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6}
第39月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7}
第40月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8}
第41月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5}
第42月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6}
第43月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7}
第44月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8}
第45月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5}
第46月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6}
第47月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7}
第48月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8}
第49月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5}
第50月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6}
第51月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7}
第52月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8}
第53月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5}
第54月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6}
第55月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7}
第56月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8}
第57月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5}
第58月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6}
第59月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7}
第60月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8}
第61月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5}
第62月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6}
第63月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7}
第64月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8}
第65月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5}
第66月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6}
第67月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7}
第68月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8}
第69月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5}
第70月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6}
第71月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7}
第72月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8}
第73月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5}
第74月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6}
第75月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7}
第76月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8}
第77月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5}
第78月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6}
第79月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7}
第80月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8}
第81月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5}
第82月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6}
第83月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7}
第84月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8}
第85月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5}
第86月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6}
第87月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7}
第88月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8}
第89月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5}
第90月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6}
第91月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7}
第92月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8}
第93月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5}
第94月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6}
第95月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7}
第96月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8}
第97月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5}
第98月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6}
第99月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7}
第100月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8}
第101月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5}
第102月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6}
第103月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7}
第104月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8}
第105月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5}
第106月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6}
第107月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7}
第108月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8}
第109月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5}
第110月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6}
第111月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7}
第112月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8}
第113月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5}
第114月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6}
第115月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7}
第116月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8}
第117月优化后:{'A': 7, 'B': 8, 'C': 6, 'D': 5}
第118月优化后:{'A': 8, 'B': 5, 'C': 7, 'D': 6}
第119月优化后:{'A': 5, 'B': 6, 'C': 8, 'D': 7}
第120月优化后:{'A': 6, 'B': 7, 'C': 5, 'D': 8}

从结果可知并不是最优解,因为从第二次优化,项目组人数都是 5 6 7 8这几个数。

上一篇:python获取知乎日报另存为txt文件


下一篇:阿里云centos7使用yum安装mysql的正确姿势