gsub的时间复杂度

2024-04-30

一根长绳子s仅包含0 and 1。这段 Ruby 代码计算了有多少个1有:

s.gsub(/1/).count

Big O 表示法的时间复杂度是多少?有没有一个工具可以进行计算?


据我所知,没有一个通用工具可以计算任意代码的 Big O 表示法 - 这将是一项艰巨的任务 - 首先,并不总是清楚要衡量哪个缩放问题。即使是非常简单的逻辑,a = b + c不会像您想象的那样缩放 - 如果您需要允许任意大的数字,那么这就是not O( 1 ).

最简单的事情就是进行基准测试并绘制结果。您应该意识到,对于高效的代码,缩放度量可能会被方法调用开销等“淹没”。所以这需要一点努力 - 您需要找到足够大的 N 值,以便将其加倍会产生显着差异。

验证您的命令是O( N )关于字符串长度,我运行了以下基准:

require 'benchmark'

def times_for length
  str = '012123132132121321313232132313232132' * length
  Benchmark.bm do |x|
    x.report( :gsub ) { 1000.times { str.gsub(/1/).count } }
  end
end

times_for 250
       user     system      total        real
gsub  1.510000   0.000000   1.510000 (  1.519658)


times_for 500
       user     system      total        real
gsub  2.960000   0.000000   2.960000 (  2.962822)


times_for 1000
       user     system      total        real
gsub  5.880000   0.010000   5.890000 (  5.879543)

通过检查,您可以看到这是一个简单的线性关系 - 每当我将字符串的长度加倍时,所花费的时间(大约)就会加倍。

顺便一提,s.count('1')速度快得多,但也O( N ):

times_for 250
       user     system      total        real
count  0.010000   0.000000   0.010000 (  0.008791)

times_for 500
       user     system      total        real
count  0.010000   0.000000   0.010000 (  0.016489)

times_for 1000
       user     system      total        real
count  0.020000   0.000000   0.020000 (  0.029052)

You could从基准测试中获取返回值,并使用它们自动猜测 Big O。这可能就是像 codility 这样的服务所做的事情。

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

gsub的时间复杂度 的相关文章

  • 如何在 sed 中转义方括号[重复]

    这个问题在这里已经有答案了 我正在使用 grep 和 sed 解析遗留的 C 代码 当尝试替换方括号时 发生了一些奇怪的事情 以下代码替换方括号效果很好 echo xyx xzx xyx sed s g 结果是 xyx xzx xyx 当我
  • Ruby 枚举器中的“break”与“raise StopIteration”

    如果我使用 Ruby Enumerators 来实现生成器和过滤器 generator Enumerator new do y x 0 loop do y lt lt x x 1 break if x gt CUTOFF end end l
  • 你能挽救我的负面回顾示例来传达数字吗?

    在 高级正则表达式 一章中掌握 Perl http oreilly com catalog 9780596527242 我有一个损坏的示例 我无法找到一个很好的修复方法 这个例子可能为了自己的利益而试图变得太聪明 但也许有人可以帮我解决它
  • 如何在正则表达式中输入“:”(“冒号”)?

    冒号 在正则表达式中具有特殊含义 但我需要按原样使用它 例如 A Za z0 9 我试图逃避它 但这不起作用 A Za z0 9 在大多数正则表达式实现 包括 Java 的 中 无论在字符类内部还是外部 都没有特殊含义 您的问题很可能是由于
  • Rails 4:资产未在生产中加载

    我正在尝试将我的应用程序投入生产 但图像和 CSS 资源路径不起作用 这是我目前正在做的事情 图像资源位于 app assets images image jpg 样式表位于 app assets stylesheets style css
  • 如何使用本地安装的gems执行Ruby程序?

    我已经使用安装了我的依赖项 bundle package 然后将它们传输到离线服务器并运行 gt bundle install local Using mime types 1 19 Using rest client 1 6 7 Usin
  • 正则表达式验证字符串是否包含三个非空白字符

    我使用欧芹 js 来验证输入 并且使用 data parsley pattern 它允许我传递正则表达式 我正在尝试验证该字符串以确保它至少包含三个非空白字符 下面是应该无效或有效的字符串 valid 1 2 b invalid 1 b s
  • ruby 中的 #encode 和 #force_encoding 有什么区别?

    我真的不明白之间的区别 encode and force encoding在 Ruby 中String班级 我明白那个 kam force encoding UTF 8 将迫使 kam 是UTF 8编码 但是怎么样 encode encod
  • Python re无限执行

    我正在尝试执行这段代码 import re pattern r w w s re compiled re compile pattern results re compiled search COPRO HORIZON 2000 HOR p
  • 使用 VCR 过滤敏感数据

    我正在使用 VCR gem 记录 http 交互并在将来重播它们 我想过滤掉 uri 请求中的实际密码值 以下是 uri 的示例 http services somesite com Services asmx Cabins Usernam
  • 如何从 ruby​​ 中的字符串中删除所有非数字?

    用户输入数字的形式如下 1 800 432 4567 800 432 4567 800 432 4566 800 432 4567 1 800 432 4567 800 432 4567 我希望所有这些都变成没有特殊字符的剥离版本 例如18
  • Nokogiri 保持 HTML 实体不变

    我希望 Nokogiri 保持 HTML 实体不变 但它似乎正在将实体转换为实际的符号 例如 Nokogiri HTML fragment p reg p to s 结果是 p p 似乎没有什么可以将原始 HTML 返回给我 inner h
  • 什么是仅匹配空字符串的正则表达式?

    有很多关于正则表达式的帖子来匹配潜在地空字符串 但我找不到任何提供正则表达式的字符串only匹配一个空字符串 我知道 将匹配任何行的开头并且 将匹配任何行的结尾以及字符串的结尾 像这样 匹配的内容远不止空字符串 如 n foobar n n
  • 已定义方法的 Ruby 钩子?

    我一直在谷歌上搜索这个问题 但找不到答案 这让我认为答案是否定的 但我想我会在这里问 以防有人确切知道 Ruby 是否有一个钩子来定义方法 即在模块或类上 如果没有 是否有人足够熟悉该实施的情况main对象以了解它到底如何将方法复制到Obj
  • 有没有办法匹配任意 Unicode 字母字符?

    我有一些文档经过 OCR 从 PDF 转换为 HTML 因此 他们最终会出现很多随机的 unicode 标点符号 而转换器会搞砸 即省略号等 他们还正确地有一堆非英语但仍然是字母字符 如 和俄语字符等 有没有办法制作一个匹配任何 unico
  • PHP 中的 Preg_replace

    我想替换 中包含的字符串中的内容content 它是多行等 preg replace 函数应该删除整个 com 没有垫子 蒙特 尝试这个 result preg replace s replacement content subject
  • 字符串中的注释和注释中的字符串

    我正在尝试使用 Python 和 Regex 计算 C 代码中包含的注释中的字符数 但没有成功 我可以先删除字符串以删除字符串中的注释 但这也会删除注释中的字符串 结果会很糟糕 是否有机会通过使用正则表达式来询问不匹配注释中的字符串 反之亦
  • 从正则表达式对象中提取允许字符串的最大长度

    一旦加载到 C 中 是否可以从正则表达式模式中提取允许的字符串的最大长度Regex object 如果我有一个正则表达式字符串定义为 A Z0 9 0 20 我可以使用字符串操作来获取最大允许长度20 但是 有没有一种方法可以更轻松地实现这
  • 在 O(n) 时间内排序?

    我被这个问题困扰了 2周 知道如何处理它吗 令 L 为 n 个不同整数的列表 假设 L 的 x 的元素在 1 750 范围内 设计线性排序算法对 L 的元素进行排序 我已经尝试过插入排序 但我不确定我的方法是否正确 Construct an
  • 如何从字符串中删除所有数字?

    我想删除字符串 0 9 中的所有数字 我写了这段有效的代码 words preg replace 0 words remove numbers words preg replace 1 words remove numbers words

随机推荐

  • Python 终端菜单?终端着色?终端进度显示?

    我有一个广泛使用 Python 2 风格 的项目 我想知道是否有终端菜单库或类似的东西 我希望通过使用箭头键突出显示选项 一些颜色等简化一些选项 为我的脚本注入一些风味和活力 我隐约记得有一种方法可以制作 bash shell 终端菜单 但
  • Java初学者网络开发工具包/环境

    我的任务是使用 java 和 mysql 开发一个交互式网站 使用 servlet 检索和处理数据 使用小程序对客户端数据进行特殊处理 并处理客户端对不同数据视图的请求 您会推荐什么作为使用 java 进行 Web 开发的合适的通用工具包
  • DynamoDBMappingException:HASH 键没有映射

    编写 DynamoDB Java 应用程序时 如果表及其数据模型配置不正确 则在写入表或从表中检索时 您可能会收到 无 HASH 键映射 错误 完整的异常类似于 com amazonaws services dynamodbv2 datam
  • Django (JSONField) 和 tastypie

    我通过使用 JSONField 在 mysql 中创建了一个 TextField django 类型的表 这就是我的模型的样子 from django db import models from json field import JSON
  • 我什么时候应该在 ASP.NET MVC 中使用部分视图? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我已经完成了示例 asp net m
  • 在 Tridion 2011 SP1 中实现存储扩展时,未定义名为 No bean

    我正在尝试使用下面的示例来实现存储扩展 http www sdltridionworld com articles sdltridion2011 tutorials extending content delivery storage sd
  • 错误 C2601:“main”:本地函数定义非法 - MS VS 2013 编译器

    我正在用 C 编写一个小程序 当我尝试使用 MS VS 2013 编译器编译它时 出现错误 C2601 main 本地函数定义非法 这是什么意思 我的代码是 include
  • 在新选项卡或窗口中打开链接[重复]

    这个问题在这里已经有答案了 是否可以开一个a href链接在新选项卡而不是同一选项卡中 a href http your url here html Link a 您应该添加target blank and rel noopener nor
  • 加速Cuda程序

    要更改哪一部分来加速此代码 代码到底在做什么 global void mat Matrix a Matrix b int tempData new int 2 tempData 0 threadIdx x tempData 1 blockI
  • 在 C 中实现逻辑右移

    我正在致力于仅使用按位运算符在 C 中创建逻辑右移函数 这是我所拥有的 int logical right shift int x int n int size sizeof int size of int arithmetic shift
  • 为什么嵌套 Java 类不能从 Scala 导入?

    我应该如何使用嵌套 Java 类来模拟斯卡拉莫克 特别是当所说的嵌套 Java 类来自第三方库时 鉴于以下来源 src main java Outer java Outer class that offers a Nested class
  • 如何使用 tf-idf 选择停用词? (非英语语料库)

    我已经成功评估了tf idf 函数 http en wikipedia org wiki Tf idf对于给定的语料库 如何找到每个文档的停用词和最佳词 据我所知 给定单词和文档的 tf idf 较低意味着它不是选择该文档的好单词 停用词是
  • VSTS 构建失败并显示 MSB4184 路径不是合法形式

    我正在尝试使用 VSTS 中的构建系统来构建和部署 c net Web 应用程序 我创建了一个新的单项目解决方案 因为似乎没有任何方法可以指定在多项目解决方案中构建 部署哪个项目 并设置我的构建定义以指向这个新解决方案 我已将其设置为使用
  • java.library.path 中没有字体管理器

    以下代码在我的桌面上运行得很好 BufferedImage image new BufferedImage width height BufferedImage TYPE INT RGB Graphics g image getGraphi
  • 修改 SIR 模型以包含随机性

    我正在尝试通过将真实流行曲线与随机 SIR 模型的模拟进行比较来建立一种估计传染病参数的方法 为了构建随机 SIR 模型 我使用 deSolve 包 而不是使用固定参数值 我想从以原始参数值为中心的泊松分布中绘制每个时间点方程中使用的参数值
  • If 语句不遵循其条件

    在我的滚动代码中 您只需编写 r 然后按 Enter 键 但似乎不会读取该内容并转到重新启动 while 循环的 else 让它滚动的唯一方法是输入除 r 之外的其他内容 而不是 standard in 1 解析错误 bin bash th
  • 模板编译错误 - 没有匹配的调用函数

    我正在尝试将字符串转换为数字 为此 我找到了以下方法 include
  • 是否可以从C语言函数写入word文件?

    我有一个用 C 语言编写的图书馆管理系统 其中有 I O 文件 dat 如何从该函数中获取word文件的输出 void viewbooks void show the list of book persists in library int
  • 为什么如果条件无法比较负整数和正整数[重复]

    这个问题在这里已经有答案了 include
  • gsub的时间复杂度

    一根长绳子s仅包含0 and 1 这段 Ruby 代码计算了有多少个1有 s gsub 1 count Big O 表示法的时间复杂度是多少 有没有一个工具可以进行计算 据我所知 没有一个通用工具可以计算任意代码的 Big O 表示法 这将