0
点赞
收藏
分享

微信扫一扫

[算法导论]-第五章-概率分析和随机算法

夏侯居坤叶叔尘 2021-09-22 阅读 32

本章重点

1.在线雇佣问题

2.


1.在线雇佣问题

雇佣问题求的是面试n个人并雇佣了m个人时的总费用

思想一:
1.随机生成一个大小为50的数组peoples表示有50个人来面试,且数组的值都不相同代表各自的rank;
2.面试费用一个20,录用费用一个40,面试完后总费用cost;
3.实验50次,每次的费用使用cost_list.append(cost)存储到cost_list列表中;
4.最后做出图像看看是否有规律。
# _*_coding:utf-8_*_
import pylab as pl
import random 
assist = 0
cost = 0
cost_list = []
for tr in range(50):
    peoples = random.sample(range(50), 50)
    for people in peoples:
        cost += 20
        if assist < people:
            assist = people
            cost += 40
            print assist,
    print
    cost_list.append(cost)
    cost = 0
    assist = 0
min_cost = cost_list[0]
max_cost = cost_list[0]
list_y = range(1, 51)
print min(cost_list), max(cost_list)
pl.plot(list_y, cost_list, 'r')
pl.xlim(0.0, 50)
pl.show()
思想二:
从n个候选者中选择出最好的候选者。
assList是所有候选者列表。类Assistant中的name是候选者的名字。value是候选者价值得分(当然是越高的越优秀啦~~~)
hire_assitant返回最优秀者。
def hire_assistant(assList):
    n = len(assList)
    best = 0
    index = 0
    for i in range(n):
        value = assList[i].score
        if value > best:
            best = value
            index = i
    return assList[index]
 
 
class Assistant:
    def __init__(self,a_name="anonymous",value=0):
        self.name = a_name
        self.score = value
思想三:
def HIRE_ASSISTANT(n):
    best = 0
    best_qualify=0
    for i in range(len(n)):
        if n[i] > best_qualify:
            best = i
            best_qualify = n[i]
    return  best, best_qualify

n=[4,2,3,5,8,6,7]
print(HIRE_ASSISTANT(n))

思想四:


#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
const int maxn=1000000;
ll n,i,best,cost,ability,sum;
int main()
{
    scanf("%lld",&n);
    maxability=best=0;
    for(i=1;i<=n;i++)
    {
        scanf("%lld%lld",&cost,&ability);
        if(ability>maxability)
        {
            maxability=ability;
            sum+=cost;
        }
    }
    printf("%lld\n",sum);
    return 0;
}

举报

相关推荐

0 条评论