Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.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
Matrix 磁带上的矩阵变换_Matrix_Programming Pearls - Fatal编程技术网

Matrix 磁带上的矩阵变换

Matrix 磁带上的矩阵变换,matrix,programming-pearls,Matrix,Programming Pearls,编程pearls问题7是关于转换存储在磁带上的4000 x 4000矩阵我的解决方案是使用一个临时变量,交换a[i][j]和a[j][i]的内容 作者给出的解决方案让我有点困惑。他说我们应该: 将行和列索引前置到每个 按行对矩阵中的记录进行排序 删除附加的索引 你为什么要经历这么多麻烦才能完成这件事?它与磁带有关吗?我认为磁带的意思是:要找到某个元素,你必须从一开始到那个元素 但我很难理解“什么是系统磁带排序”和“它为什么工作” 我认为这个练习的意义如下 对于那个年代的计算机来说,没有足够的内存

编程pearls问题7是关于转换存储在磁带上的
4000 x 4000
矩阵
我的解决方案是使用一个临时变量,交换
a[i][j]
a[j][i]
的内容
作者给出的解决方案让我有点困惑。他说我们应该:

  • 将行和列索引前置到每个
  • 按行对矩阵中的记录进行排序
  • 删除附加的索引

  • 你为什么要经历这么多麻烦才能完成这件事?它与磁带有关吗?

    我认为磁带的意思是:要找到某个元素,你必须从一开始到那个元素


    但我很难理解“什么是系统磁带排序”和“它为什么工作”

    我认为这个练习的意义如下

  • 对于那个年代的计算机来说,没有足够的内存来容纳这样大小的矩阵。因此,您提出的交换方法不可行。为了转置如此大的矩阵,应利用外部存储器,即磁带

  • 然而,来回读写磁带相当慢。但是磁带是串行存储设备。因此,连续读写可以节省大量时间

  • 合并排序非常适合这种序列化存储,因为它访问元素的方式,正如本文所说的。所以我相信“系统磁带排序”是指在磁带上进行合并排序


  • 记住以上三点后,我想你可以理解这个练习

    当编写Pearls程序时,一台拥有32K可用内存的计算机将是一台相当“大的机器”。由2字节整数组成的4000 X 4000矩阵需要32Mb的存储空间,因此不可能将其读入内存。试着编写一个程序,在内存中转置一个非平方矩阵——这个练习比你想象的更有趣(平方很简单,非平方,不太多)。