level 9
前天在网上寻找计算ruby运行时间的方法,突发奇想改了一下,运行了两个钟都没结果,简略算算,我的电脑是不可能在一天内完成的。我把14改成20,改完的代码见二楼
2014年12月21日 12点12分
1
level 9
min = Math.sqrt(1).to_i
max = Math.sqrt(10**20).to_i
def isH(num)
num = num.to_s
return num == num.reverse
end
for num in (min..max)
if isH num
z = num**2
if isH z
puts z
end
end
end
2014年12月21日 12点12分
2
level 9
源代码如下,加了计算时间的代码而已,原题20为14
t1 = Time.now.to_f
min = Math.sqrt(1).to_i
max = Math.sqrt(10**14).to_i
def isH(num)
num = num.to_s
return num == num.reverse
end
for num in (min..max)
if isH num
z = num**2
if isH z
puts z
end
end
end
t2 = Time.now.to_f
puts t2-t1
2014年12月21日 12点12分
3
level 9
所以我有个问题,能用ruby优化这程序,以达到这效果么?效率嘛,我算了一下,运行原程序(没将14改成20之前)时,如果大概只需0.087秒的话就能达到一天运算到20,ruby行么?或者你们的电脑牛逼。。。
2014年12月21日 12点12分
5
level 9
1212225222121
1214428244121
1232346432321
1234567654321
4000008000004
4004009004004
7.21770485
Pentium(R) Dual-Core CPU E6300 @ 2.80GHz
这种需要速度的地方, 用C可以提速 1/3, 查表可以提速1/2
2014年12月22日 08点12分
7
具体程序什么情况,我刚学啊
2014年12月22日 08点12分
我去,你那CPU好高频,你试跑那个原程序如何?
2014年12月22日 08点12分
什么是查表~
2014年12月22日 08点12分
回复
˫����
:打表,然后在表中查询。
2015年06月14日 13点06分
level 1
谁的电脑一天也跑不出来
这个问题不需要大量运算 电脑再快也没用
因为涉及到 大量的判断
用 Python 甚至比 C 写出来的程序更快
2015年01月23日 07点01分
14
level 1
1
4
9
121
484
10201
12321
14641
40804
44944
1002001
1234321
4008004
100020001
102030201
104060401
121242121
123454321
125686521
400080004
404090404
10000200001
10221412201
12102420121
12345654321
40000800004
1000002000001
1002003002001
1004006004001
1020304030201
1022325232201
1024348434201
1210024200121
1212225222121
1214428244121
1232346432321
1234567654321
4000008000004
4004009004004
3.827280044555664
2015年05月07日 07点05分
16
level 9
我机子比较老,应该在1s多一点儿吧。
t1 = Time.now.to_f
min = Math.sqrt(1).to_i
max = Math.sqrt(10**20).to_i
max_sqrt=Math.sqrt(max).to_i
arr=[]
for num in (min..max_sqrt)
str = num.to_s
r_str = str.reverse
num1 = str[0...-1] + r_str
if num1 == num1.reverse
arr << num1.to_i
end
num2 = str + r_str
if num2 == num2.reverse
arr << num2.to_i
end
end
for num in arr.sort
if num > max
break
end
z = num**2
if z.to_s == z.to_s.reverse
puts z
end
end
t2 = Time.now.to_f
puts t2-t1
2015年05月23日 12点05分
17
楼主的算法复杂度是O(n^(1/2))。我写的这个是O(n^(1/4))。所以,即便10^20,大约1s就出结果了。根本不用一天。
2015年05月24日 00点05分
回复
��ӣ����ѩ
:我初学,不懂其中原理,如何看出算法速率?
2015年05月24日 01点05分
回复 双鱼才 :呃,看不出速率,只能分析出时间复杂度。我写的是渐近复杂度。具体定义比较麻烦,一两句解释不清,查一下资料吧。
2015年05月24日 02点05分
一秒?不行吧,真的,不如试着算算看,绝对不可能
2015年07月20日 16点07分