Ruby 方法的大 O 表示法?

2024-02-13

如何找到 Ruby 方法的复杂度?

例如length http://www.ruby-doc.org/core-2.1.2/Array.html?如果我查看源代码,我会看到以下内容:

               static VALUE
rb_ary_length(VALUE ary)
{
    long len = RARRAY_LEN(ary);
    return LONG2NUM(len);
}

但我不知道如何阅读它才能找到大 O 符号。


没有维护 Ruby 方法的理论复杂性列表。您感兴趣的是minitest/benchmark,其用法如下:

require 'minitest/autorun'
require 'minitest/benchmark'

class TestFoobar < Minitest::Benchmark
  def setup
    @foo_arrays = ( 1 .. 10_000 ).map { |n| [ 42 ] * n }
    # Because default benchmarking range is [1, 10, 100, 1_000, 10_000]
  end

  def bench_foo_size
    assert_performance_constant 0.99 do |n| @foo_arrays[ n ].size end
  end
end

如果你运行上面的测试,你实际上可以看到性能Array#size方法是不变的。如果你改变#bench_foo_size to:

def bench_foo_size
  assert_performance_linear 0.99 do |n| @foo_arrays[ n ].size end
end

测试实际上会失败,因为Array#size不是线性的,而是次线性的。minitest/benchmark非常灵活,您可以将其应用到您自己的代码以及内置资产中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ruby 方法的大 O 表示法? 的相关文章

随机推荐

  • 如何测试json api?

    我有一个测试 测试显示交易 此测试失败并显示错误Failed asserting that an array has the key user id 我不知道这个错误的原因 public function a test display de
  • java.lang.IllegalStateException:必须在主题中指定preferenceTheme

    我试图在 API 16 上运行的应用程序中加载 PreferenceFragment PreferenceFragmentCompat 但每次尝试加载片段时都会收到以下错误 E AndroidRuntime 致命异常 main java l
  • 如何恢复 OSX 应用程序中的窗口位置?

    我创建了一个故事板 它有窗口视图控制器作为初始视图控制器 我给窗口起了一个自动保存名称preferencesWindow 在首选项中 我选中了 x 可恢复和 x 关闭时释放 当我进入菜单并单击 首选项 时 我会像这样加载窗口控制器 let
  • 如何访问源生成器中项目引用的程序集?

    我有一个类库项目 First csproj 和一个文件 ICar cs namespace First public interface ICar string Name get set 我有一个空的类库项目 Second csproj 和
  • ResX 文件和额外的应用程序层

    我们正在使用一些大型 ASP NET Web 工具包制作一个 Web 应用程序 一开始我们创建了很多命令和服务器控件等基类来让我们的工作更轻松 现在 当我们使用它构建我们的应用程序时 我们决定构建另一个应用程序 为了不复制我们所有的工作 也
  • delphi中如何获取appdata文件夹路径

    如何获取appdata文件夹路径 这是我的代码 begin Winexec PAnsichar appdata TEST exe sw show end 但不工作 您不能将环境变量传递给WinExec 你必须先解决它们 例如 uses Sy
  • 为什么服务器不使用 C# 中的套接字接收本地传输中的所有 UDP 数据包?

    我有一个服务器和一个客户端应用程序 客户端将一堆数据包发送到服务器 使用的协议是UDP 客户端应用程序生成一个新线程来循环发送数据包 服务器应用程序还生成一个新线程来循环等待数据包 这两个应用程序都需要根据传输进度保持 UI 更新 如何正确
  • 在建立安全 TLS 连接之前,客户端网络套接字已断开连接。如何在 Node js 中使用 Kafka JS 连接到 kafka 集群?

    我获得的凭据 我也有kafka keystore jks and kafka truststore jks host xxxxx xxxxx x cloudclusters net port xxxxx ip xxx xxx xxx xx
  • 如何为 Google Closure 编译器自动生成外部程序

    假设您正在处理具有多个外部库依赖项的 javascript 项目 并且希望在 ADVANCED OPTIMIZATIONS 模式下使用 Google Closure 编译器来编译源代码 由于在此模式下 编译器将重命名对外部库对象和函数的代码
  • 如何从 Tkinter 文本小部件获取输入?

    如何从 Tkinter 获取输入Text widget EDIT 我问这个问题是为了帮助其他有同样问题的人 that这就是为什么没有示例代码的原因 这个问题已经困扰了我几个小时 我用这个问题来教导其他人 Please不要把它当作一个真正的问
  • Spring MVC 填充下拉列表的最佳方法 - 属性文件?

    我想填充下拉列表 但不想继续访问数据库 我正在考虑将我的国家 地区列表或语言列表放在属性文件中 这样我就可以读入它 然后将其分配给一个变量 然后我可以通过 ModelAndView 类型返回它 这是一个好方法吗 我不知道如何存储静态数据 我
  • ASP.net Identity 2.0 登录时未创建有效的身份验证

    我在 ASP net 4 5 Web Forms 项目中实现 Microsoft 最新的 Identity 2 0 时遇到问题 这是我的场景 我已经下载了最新的 Webforms Samples 代码https aspnet codeple
  • 在 qplot 中设置颜色标签并改变调色板

    使用下面的代码 我可以设置 x 和 y 轴的标签 但无法设置颜色的标签cyl这里 这文档 http 127 0 0 1 13246 library ggplot2 html qplot html没有提供任何解决办法 qplot mpg wt
  • php比较数组键,而不是值

    我成功地使用了 array key exists 如 php net 所描述的 Example 但是 去掉这些值 它就不起作用了
  • 使用角度反应形式进行信用卡验证

    如何根据信用卡类型验证信用卡号 我正在设计一个表单 其中首先有两个字段是显示信用卡类型 第二个用于信用卡号码 如何根据信用卡类型验证信用卡号 我了解定制validator申请于creditcardnumber字段并从regex 但是当用户更
  • ASP.NET C# 静态变量是全局的吗?

    今天我发布了一个小型的asp net beta web应用程序 允许内部员工修改一些产品信息 我们开始遇到用户覆盖彼此产品信息的问题 即使每个工作人员正在编辑完全不同的行 产品 在谷歌上进行一些搜索后 我想我知道发生了什么 它与静态变量的使
  • 在 Android 上移植 C++ lib/app [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想将一些 C C 库移植到 Android 这有多可行 例如OpenSSL可以移植吗 或者假设一个依赖
  • 空“key”参数错误

    我正在使用 IReport 3 5 0 我的 java GWT 应用程序使用编译的 jasper 文件来创建报告 我正在 java 应用程序中创建数据源并使用fillReport 报告填写方法 它工作正常 它填充了我在 jrxml 和 Ja
  • FBSDKSharePhoto 不使用 Swift 与照片共享链接

    当我尝试同时通过 FBSDKSharePhoto 共享链接和图片时 仅共享照片 没有链接出现 这是我使用的代码 let photo FBSDKSharePhoto FBSDKSharePhoto photo image self scale
  • Ruby 方法的大 O 表示法?

    如何找到 Ruby 方法的复杂度 例如length http www ruby doc org core 2 1 2 Array html 如果我查看源代码 我会看到以下内容 static VALUE rb ary length VALUE