(0..float::INFINITY).lazy.take_while {|n|(n**2+ 1*n+41).prime?}.force[-1]
我正在使用它作为优化练习.这工作正常,但它有一个内存顺序O(n),因为它将创建整个数组,然后采取最后一个元素.
我试图在不构建整个列表的情况下得到这个,因此是懒惰的枚举器.除了使用while循环之外我什么也想不到.
(0..float::INFINITY).lazy.take_while {|n|(n**2+ 1*n+41).prime?}.last.force
有没有办法在空间顺序O(1)而不是O(n)中使用枚举器?
编辑:懒惰是没有必要在这里工作的例子,但我认为减少函数的空间复杂性可能更有用?
解决方法 如果您只是不想保存整个数组:(0..1.0/0).find {|n| !(n**2+n+41).prime?} - 1
1.0 / 0与float :: INFINITY相同.我用过它,以防你没看到它.据我所知,两者都不可取.
我的第一个想法显然是矫枉过正:
def do_it e = (0..1.0/0).to_enum loop do n = e.peek return e.inspect unless (n**2+n+41).prime? e.next endenddo_it总结
以上是内存溢出为你收集整理的ruby – 获取惰性枚举器的最后一个元素全部内容,希望文章能够帮你解决ruby – 获取惰性枚举器的最后一个元素所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)