Uva #690 Pipeline Scheduling (习题7-5)

原题读起来感觉有一点绕,不过题意很简单:其实就是计算机要重复地做一些相同的任务,每个任务需要一定时间,在这段时间内可能会用到不同的处理器(共有5个处理器)。一个处理器在使用的时候会锁住,其他的任务就不能访问了。只能等到下一个clock cycle再使用这个处理器。

任务使用处理器的pattern就是input,比如


7
X...XX.
.X.....
..X....
...X...
......X


就代表每个任务耗时7个cycle,X表示在这一个cycle内这个处理器会被使用。

问题是:现在有10个这样的任务,如何安排他们使得计算机在最短时间内处理完所有任务。每个任务耗时小于20个cycle。输出最短的时间。



理解了题意之后,可以大概得出一个解法,想法并不难(但是要AC还是有点难度。。):

回溯法dfs,模拟八皇后问题,每次尝试在下一个位置“放置”一个任务,看看会不会和之前的任务有冲突。


但是这道题的难点是,需要得出所有可能的结果,最后选出一个最小的。但是可能的结果是无穷多的(因为只要不冲突,可以往后面的任意位置摆放),一点点分析可以得出答案应小于200(即任务之间完全没有重叠)。但是解答树的节点还是太多了,如果不剪枝,最坏情况下结点数的规模大概是20^10(每个任务最多有20种摆放的位置,共有10个任务),会TLE

<
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
import numpy as np import matplotlib.pyplot as plt %matplotlib inline from sklearn.datasets import load_digits data, labels = load_digits(return_X_y=True) (n_samples, n_features), n_digits = data.shape, np.unique(labels).size print(f"# 类别数: {n_digits}; # 样本数: {n_samples}; # 特征数: {n_features}") print(data[:2]) from time import time from sklearn.pipeline import make_pipeline from sklearn.preprocessing import StandardScaler from sklearn.cluster import KMeans kmeans=KMeans(n_clusters=10, random_state=42) ### 创建管道并训练,记录训练时间 t0 = time() estimator = make_pipeline(StandardScaler(), kmeans).fit(data) fit_time = time() - t0 print("训练时间:", fit_time) ### 通过惯性(inertia)聚类的性能 print(estimator) print(estimator[-1].inertia_) result1={"fit-time":fit_time,"inertia:":estimator[-1].inertia_ } from sklearn.decomposition import PCA ### ??编程使用PCA分解,得到10个主成分,放到变量 components 中--------------------------- pca = PCA(n_components=10) components = pca.fit_transform(data) ###------------------------------------------------------------------------- ### 创建KMeas对象 kmeans=KMeans(n_clusters=10, init="k-means++", random_state=42) ### 创建管道并训练,记录训练时间 t0 = time() estimator = make_pipeline(StandardScaler(), kmeans).fit(data) fit_time = time() - t0 print("训练时间:", fit_time) ### 通过惯性(inertia)聚类的性能 print(estimator) print(estimator[-1].inertia_) result2={"fit-time":fit_time,"inertia:":estimator[-1].inertia_ } from sklearn.decomposition import PCA ### ??编程 选择保持 98%的信息的PCA模型,用名为pca的变量表示 ---------- pca = PCA(n_components=0.98) ###------------------------------------------------------------------- ###创建KMeas对象 kmeans=KMeans(n_clusters=10, random_state=42) ###??编程 创建一个 标准化+PCA降维+KMeas聚类的管道并训练,记录训练时间 t0 = time() estimator = make_pipeline(StandardScaler(), pca, kmeans).fit(data) ##增加pca预处理 fit_time = time() - t0 print("训练时间:", fit_time) ### 通过惯性(inertia)聚类的性能 print(estimator) print(estimator[-1].inertia_) result3={"fit-time":fit_time,"inertia:":estimator[-1].inertia_ }可以选择不同的KMeans的参数对digits进行聚类,比较实验结果,并选择一个针对此问题的最好模型
最新发布
05-25

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值