磁带上的矩阵转置
Posted
技术标签:
【中文标题】磁带上的矩阵转置【英文标题】:Matrix transposition on a magnetic tape 【发布时间】:2012-01-29 09:34:59 【问题描述】:编程知识问题 7 是关于转置存储在 磁带 上的 4000 x 4000
矩阵。 我的解决方案是简单地使用临时变量并交换 a[i][j]
和 @ 的内容987654323@。
作者给出的解决方案让我有点困惑。他说我们应该:
-
将行索引和列索引添加到每个索引
按行对矩阵中的记录进行排序
删除附加的索引。
为什么要经历这么多麻烦才能完成这项工作?跟磁带有关系吗?
【问题讨论】:
在编写 Progrmming Pearls 时,一台具有 32K 可用内存的计算机将是一台相当“大机器”。 2 字节整数的 4000 X 4000 矩阵需要 32Mb 的量级来存储,因此不可能将其读入内存。尝试编写一个程序,在内存中转置一个非方阵 - 这个练习比你想象的更有趣(方阵很容易,非方阵,没那么多)。 【参考方案1】:我认为这个练习的意义如下。
对于那个年代的计算机,没有足够的 RAM 来容纳具有这种大小的矩阵。所以你提出的交换方法是不可行的。为了转置如此大的矩阵,应该利用外部存储器,即磁带。
但是,来回读写磁带相当慢。但是磁带是串行存储设备。所以串行读写可以节省很多时间。
归并排序非常适合这种序列化存储,因为它访问元素的方式,正如wikipedia page 所说的那样。所以我相信“系统磁带排序”是指磁带上的合并排序。
记住以上三点后,我想你可以理解这个练习了。
【讨论】:
【参考方案2】:我认为磁带的意思是:要找到某个特定元素,你必须从一开始到那个元素。
但我很难理解“什么是系统磁带排序”和“它为什么起作用”。
【讨论】:
以上是关于磁带上的矩阵转置的主要内容,如果未能解决你的问题,请参考以下文章