关于"反转字符串的大O符号"码

时间:2015-01-03 16:48:02

标签: perl big-o

我写了一个代码来反转一个字符串,但我想为我的代码计算一个大的表示法。 我猜是O(m + n)。如果这是错的,请纠正我。

use strict;
use warnings;

print "Please enter you string \n";
chomp (my $string = <STDIN>);
print "Entered string is $string \n";
my @word = split(" ",$string);

my $eachword;
foreach $eachword(@word){
    my @each = split(//,$eachword);
    my $wordlength = scalar(@each);
    for (my $j=$wordlength-1; $j>=0; $j--) {
        print $each[$j];

    }
    print " ";
}

输入:

hai how are you

o / p:

iah woh era uoy

2 个答案:

答案 0 :(得分:1)

使用大写符号你不关心常数但是假设值接近无穷大的复杂性,所以m + n或2n在o(n)之内。设n是你的字数,m是你可以假设为常数的最大字符数,因为n是你真正的可扩展性问题。所以它是n + c(常数)= o(n)。进一步阅读:Big O notation

答案 1 :(得分:0)

取决于mn是什么:)通常n表示整个输入的长度。在这种情况下,你的算法使用O(n)时间(和O(n)空间 - 内存 - 至少我是这么认为的,我对perl及其split的实现不是很熟悉。 / p>

“证明”会遵循这样的想法,即您的算法将输入分为m <= n长度为l_1 + .. l_m = n的单词(不失一般性,让我们忽略空格)。每个单词在l_1时间内反转(输出每个字母)。这会给你最后O(n)时间作为总和(+初始线性分割)。