【发布时间】:2010-09-26 22:45:36
【问题描述】:
REXX中length()函数的处理开销如何随字符串长度变化?
更新:我正在使用:
- uni-REXX (R) 版本 297t
- 打开-REXX (TM) 版权所有 (C) iX Corporation 1989-2002 年。保留所有权利。
【问题讨论】:
标签: complexity-theory overhead rexx
REXX中length()函数的处理开销如何随字符串长度变化?
更新:我正在使用:
【问题讨论】:
标签: complexity-theory overhead rexx
开销为0。长度存储在描述符中。
尼尔·米尔斯特德 uni-REXX 的作者(不开玩笑)。
【讨论】:
这完全取决于实现。您是指 OS/2 的 REXX、z/VM 的 REXX、z/OS 的 REXX、Windows 的 OOREXX、REXX/400 还是 Regina?
IBM 的 REXX 语言规范中没有规定函数是如何在幕后实现的,如果您扫描字符串,则可能是 O(N),如果长度与字符串一起存储在某处,则可能是 O(1)。
如果它真的很重要,最好使用基准代码进行测试,看看长度是否有所不同。
【讨论】:
我不确定。我在我的日子里写过一些 Rexx,但我从来没有遇到过 length() 函数的性能问题。这种扩展方式甚至可能取决于您对 Rexx 解析器的实现。
我会编写一个 Rexx 脚本,对 10 个字符的字符串、100 个字符的字符串和 1000 个字符的字符串调用 10.000 次“length()”调用。
在图表中绘制结果时间将为您提供关于性能如何下降的近似值。
说了这么多,我的猜测是性能下降最多是线性的,就像在 O(n) 中一样。 (见http://en.wikipedia.org/wiki/Big_O_notation)
【讨论】:
它是特定于语言实现的。我现在已经很久没有写任何 REXX 了,事实上我写了 AREXX(Amiga 实现),那是 15 年前的事了。 :-)
您可以编写自己的测试例程。生成长度增加的字符串,并使用高性能计时器测量获取 length() 所需的时间。如果您将时间和字符串长度存储在基于文本文件的逗号分隔表中,则可以使用gnuplot 绘制它。然后你会非常清楚地看到它是如何扩展的。
编辑:我应该先检查罗尔夫的答案,因为他或多或少写了相同的东西。 :-)
【讨论】:
我可以代表 IBM Mainframe 版本、OS/2 的 Classic Rexx 版本以及任何 Object Rexx 实现。长度存储在字符串描述符中,因此开销与字符串长度无关。
【讨论】: