我写了一个代码来反转一个字符串,但我想为我的代码计算一个大的表示法。 我猜是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
答案 0 :(得分:1)
使用大写符号你不关心常数但是假设值接近无穷大的复杂性,所以m + n或2n在o(n)之内。设n是你的字数,m是你可以假设为常数的最大字符数,因为n是你真正的可扩展性问题。所以它是n + c(常数)= o(n)。进一步阅读:Big O notation。
答案 1 :(得分:0)
取决于m
和n
是什么:)通常n
表示整个输入的长度。在这种情况下,你的算法使用O(n)
时间(和O(n)
空间 - 内存 - 至少我是这么认为的,我对perl及其split
的实现不是很熟悉。 / p>
“证明”会遵循这样的想法,即您的算法将输入分为m <= n
长度为l_1 + .. l_m = n
的单词(不失一般性,让我们忽略空格)。每个单词在l_1
时间内反转(输出每个字母)。这会给你最后O(n)
时间作为总和(+初始线性分割)。