Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 算法-如何在p波段上放置n个文本,以使全局访问时间最短。每个文本都有其';自身长度_Algorithm_Greedy - Fatal编程技术网

Algorithm 算法-如何在p波段上放置n个文本,以使全局访问时间最短。每个文本都有其';自身长度

Algorithm 算法-如何在p波段上放置n个文本,以使全局访问时间最短。每个文本都有其';自身长度,algorithm,greedy,Algorithm,Greedy,问题听起来是这样的,我们有n个文本,它们将被放在p个磁带/乐队上(我不知道英语中的等效词是什么,但我想你明白我在说什么) 为了阅读位于其中一个波段上的位置k的文本,我们必须阅读特定波段上位置1,2,…,k的文本。每个文本都有自己的长度 现在,我们必须找到一种方法,把文本放在p波段上,这样我们就可以得到一个最小的全局访问时间。全局接入时间通过将每个频带的所有总接入时间相加来计算 计算频带总接入时间的公式为: n_ \ [L(T1)+L(T2)+...+L(Ti)] /_ i=1 现

问题听起来是这样的,我们有n个文本,它们将被放在p个磁带/乐队上(我不知道英语中的等效词是什么,但我想你明白我在说什么)

为了阅读位于其中一个波段上的位置k的文本,我们必须阅读特定波段上位置1,2,…,k的文本。每个文本都有自己的长度

现在,我们必须找到一种方法,把文本放在p波段上,这样我们就可以得到一个最小的全局访问时间。全局接入时间通过将每个频带的所有总接入时间相加来计算

计算频带总接入时间的公式为:

n_
 \  [L(T1)+L(T2)+...+L(Ti)]
 /_    
i=1
现在,我画的那个小图是从1到n的和

L(ti)是ti的长度

ti是位于各自频带上位置i处的文本

以下是“伪代码”中的一个等价项,以防它有所帮助:

n-number of texts;
Band[n]-array of texts
sum=0, sum2=0; 
for(int i=0;i<n;i++)
    {sum=0;
    for(int j=0;j<=i;j++ )
        sum=sum+Band[j].length;
    sum2=sum2+sum; }
return sum2;
波段1:2,5,8->波段1的总接入时间:24

第2组:3、6、9->第2组的总接入时间:30

三级考试:4、7、10->三级考试总考试时间:36

全局接入时间:24+30+36=90


我将文本位置称为磁带中特定文本之后出现的文本数量,它还表示文本将被读取的额外次数

由于您只对访问时间的总和感兴趣,因此文本如何分组到磁带中没有实际意义,但每个文本的位置是什么,例如,在相同位置但在不同磁带上切换两个文本不会改变全局访问时间。 在不同位置切换两个不同大小的文本会改变时间,但通常较长的文本应放在较低的位置(靠近末尾)


该算法可以是贪婪的,从最长的文本到最短的文本,然后将每个文本放在最后一个可用的位置,放在其中文本最少的磁带上,例如,如果有10个文本和5个磁带,那么长的5个文本将放在每盘磁带的末尾,短的5个文本将放在磁带的开头。

我认为这不是最好的方法,因为如果你先放长的文本,那么每次迭代都会考虑到它们,但是如果你放在最后,它们只会被考虑一次。我认为解决这个问题的最好方法和你说的正好相反,先把小的放在前面,然后把大的放在最后。是的,我写的是把每一个文本放在最后一个文本之前,我会尽量让它更清楚
say p is 3, so we get 3 bands
say n is 9, so we get 9 texts and the lengths are : 2, 3, 4, 5, 6, 7,   8,  9, 10 
and they are placed on the bands in the following way: