双核处理

Posted Peyton_Li

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了双核处理相关的知识,希望对你有一定的参考价值。

  一种双核CPU的两个核能够同时的处理任务,现在有n个已知数据量的任务需要交给CPU处理,假设已知CPU的每个核1秒可以处理1kb,每个核同时只能处理一项任务。n个任务可以按照任意顺序放入CPU进行处理,现在需要设计一个方案让CPU处理完这批任务所需的时间最少,求这个最小的时间。

输入描述:

  输入包括两行: 第一行为整数n(1 ≤ n ≤ 50) 第二行为n个整数length[i](1024 ≤ length[i] ≤ 4194304),表示每个任务的长度为length[i]kb,每个数均为1024的倍数。

输出描述:

  输出一个整数,表示最少需要处理的时间

 

示例1

输入

5
3072 3072 7168 3072 1024

输出

9216

 

第一种方法(穷举法)

n = int(raw_input())
a = raw_input()
a = a.strip().split()
a = [int(x)/1024 for x in a]
suma = sum(a)
x = {0:1}
for i in a:
    y = {}
    for j in x:
        if j+i not in x:
            y[j+i] = 1
    x.update(y)
res = suma
for i in x:
    res = min(res,max(i,suma-i))
print(res*1024)

代码中x的key记录了,从n个任务选取任意个任务,每种组合所要花费的时间。如果时间一样,只记录一次,这样就列出了所有的可能。最后遍历一遍,选出双核CPU处理完所有任务所需时间最少的组合

 

第二种方法(动态规划)

n = int(raw_input())
a = raw_input()
a = a.strip().split()
a = [int(x)/1024 for x in a]
suma = sum(a)

dst = [[0]*(suma/2+1)]*(n+1)
def pack(i,rest):
    if i >= n:
        return 0
    if dst[i][rest]:
        return dst[i][rest]
    if a[i] <= rest:
        result = max(a[i]+pack(i+1,rest-a[i]),pack(i+1,rest))
    else:
        result = pack(i+1,rest)
    dst[i][rest] = result
    return result
res = pack(0,suma/2)
print(max(res,suma-res)*1024)

借鉴动态规划——01背包问题的解法。

 

 

 
 

以上是关于双核处理的主要内容,如果未能解决你的问题,请参考以下文章

[编程题] 双核处理

网易--双核处理器

转帖处理器史话 | 这张漫画告诉你,为什么双核CPU能打败四核CPU?

什么叫高级处理器

NRF5340首款双核处理器无线SoC

迅为iMX6开发板支持单核,双核,四核处理器,为客户产品选择提供灵活性