所以,我在CodeEval上遇到了这个挑战,但我似乎不知道从哪里开始,所以我需要一些指针(如果可以的话,还有答案)来帮助我解决这个难题。在
说明:
有一块板(矩阵)。电路板的每个单元包含一个整数,初始值为0。在
以下操作可应用于查询板:
SetRow i x: it means that all values in the cells on row "i" have been change value to "x" after this operation.
SetCol j x: it means that all values in the cells on column "j" have been changed to value "x" after this operation.
QueryRow i: it means that you should output the sum of values on row "i".
QueryCol j: it means that you should output the sum of values on column "j".
电路板的尺寸是256x256
i
和j
是从0
到{
x
是从0
到{
输入样本:
程序应该接受文件名的路径作为第一个参数。此文件中的每一行都包含一个查询操作。E、 g
^{pr2}$输出样本:
对于每个查询,输出查询的答案。E、 g
^{3}$我在Python上不是很好,但是这个挑战非常有趣,尽管我没有任何关于如何解决它的线索。所以,我需要你们的帮助。在
谢谢!在
您可以为此使用稀疏矩阵;通过
(col, row)
元组作为字典中的键来寻址,以节省内存。64k单元是一个大列表,否则(在64位系统上为2MB+):这是更有效的方法,因为挑战不太可能为板上的所有行和列设置值。在
设置列或行是:
^{pr2}$对一行或一列求和就是:
。。。实现每个函数,然后解析每行输入以决定调用哪个函数
^{pr2}$编辑:根据Martijn的评论:
board
的总内存使用量约为2.1MB。相比之下,在100次随机的行/列写入之后,matrix
是3.1MB(尽管它是最高的,并且没有变大)。是的,
global
在修改全局对象时是不必要的(只是不要试图分配给它)。虽然从dict进行调度是好的和高效的,但是我不想把它强加给那些“在Python上不是很好”的人,尤其是对于四个条目。
为了比较,怎么样
它只为第[]行和第[]列使用4.3k内存。在
编辑2:
用你上面的代码来做矩阵,set_row,set_col
返回(压缩:)
。。。基本上,每一步分配的内存是原来的四倍。如果我更改内存度量以包含键元组
它增加得比较平稳,但在以上几点仍然需要一点跳跃:
相关问题 更多 >
编程相关推荐