设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1751|回复: 2
打印 上一主题 下一主题

[已经解决] 关于 Array 和 Table 、

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2123
在线时间
740 小时
注册时间
2010-9-6
帖子
338
跳转到指定楼层
1
发表于 2015-4-11 15:54:27 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
F1里写的是 “Ruby Array 类在处理大量信息时效率很差,因此使用了此类”

所以说处理起来有什么不同...
为什么Array会效率很差

请大神们举一些例子0.0
undefined

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

3
发表于 2015-4-11 19:20:47 | 只看该作者
RUBY 代码复制
  1. class Mat_Array
  2.   attr_reader :n
  3.   def initialize(n)
  4.     @n = n
  5.     @data = Array.new(n){ Array.new(n){ 0 } }
  6.   end
  7.   def [](i, j)
  8.     return @data[i][j]
  9.   end
  10.   def []=(i, j, value)
  11.     @data[i][j] = value
  12.   end
  13.   def *(other)
  14.     result = Mat_Array.new(n)
  15.     for i in 0...n
  16.       for j in 0...n
  17.         for k in 0...n
  18.           result[i, j] += self[i, k] + other[k ,j]
  19.         end
  20.       end
  21.     end
  22.   end
  23. end
  24.  
  25. class Mat_Table
  26.   attr_reader :n
  27.   def initialize(n)
  28.     @n = n
  29.     @data = Table.new(n, n)
  30.   end
  31.   def [](i, j)
  32.     return @data[i, j]
  33.   end
  34.   def []=(i, j, value)
  35.     @data[i, j] = value
  36.   end
  37.   def *(other)
  38.     result = Mat_Array.new(n)
  39.     for i in 0...n
  40.       for j in 0...n
  41.         for k in 0...n
  42.           result[i, j] += self[i, k] + other[k ,j]
  43.         end
  44.       end
  45.     end
  46.   end
  47. end
  48.  
  49. def test_array
  50.   t = Time.now
  51.   a = Mat_Array.new(100)
  52.   b = Mat_Array.new(100)
  53.   a * b
  54.   p Time.now - t
  55. end
  56.  
  57. def test_table
  58.   t = Time.now
  59.   a = Mat_Table.new(100)
  60.   b = Mat_Table.new(100)
  61.   a * b
  62.   p Time.now - t
  63. end

Table比Array快一点,但是二者应该是在一个量级上的。
这里测试Array跑完一次矩阵乘法需要3.5s,Table需要3.0s左右,我特地使用了效率低的写法。
感觉处理这类问题,浪费的时间应该在元素的读取上,如果用改良的写法能提高一倍的效率。

点评

不过如果说Table效率高的话应该在任何电脑上都是一样它比较快吧...  发表于 2015-4-11 23:30
也可能和电脑的硬件配置有关···比如我的旧电脑用VA会莫名其妙丢工程,新电脑用xp系统的时候va卡的一笔,win7变成xp卡的一笔···  发表于 2015-4-11 22:32
Table 足足慢了0.15秒....果然是系统有关吗。。  发表于 2015-4-11 22:27
和系统有关吧···你看楼上的点评  发表于 2015-4-11 20:18
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

2
发表于 2015-4-11 16:11:34 | 只看该作者
说实话,我感觉效率差不多

RUBY 代码复制
  1. size = 100
  2.  
  3. # Array
  4.  
  5. t = Time.now
  6. a_big_array = Array.new(size) { Array.new(size) { Array.new(size) } }
  7. size.times do |x|
  8.   size.times do |y|
  9.     size.times do |z|
  10.       a_big_array[x][y][z] = x + y + z # write
  11.       a_big_array[x][y][z] # read
  12.     end
  13.   end
  14. end
  15.  
  16. p Time.now - t
  17.  
  18. # Table
  19.  
  20. t = Time.now
  21. a_big_table = Table.new(size, size, size)
  22. size.times do |x|
  23.   size.times do |y|
  24.     size.times do |z|
  25.       a_big_table[x, y, z] = x + y + z # write
  26.       a_big_table[x, y, z] # read
  27.     end
  28.   end
  29. end
  30.  
  31. p Time.now - t

点评

这是运行时间吗、、我这里Table怎么比Array慢...  发表于 2015-4-11 16:15
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-16 00:52

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表