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