- -
n
,
.
O (n 2) O (n log n), 10000 - 348: 1. O (n) Java, , -, .NET.
, c (n) , , :
c (0) = 0
c (1) = 1
c (n) = c (⌊n/2⌋) + c (⌈n/2⌉) + n
,
c (2 k + a) = (k + 1) 2 k + (k + 3) a
k a , n = 2 k + a, a < 2 k; .
O (k 2 k), .. O (n log 2 n), O (n log n),
:
n (n + 1)/2 , , O (n 2).
;
10000 :
c (10000) =
c (2 13 + 1808) =
(13 + 1) * 8192 + 16 * 1808 =
143616
50 005 000 , 1: 348,
1: 250.
, , , .
, ,
, , String.Substring ,
Java, .NET comparison-of-substring-operation-performance-between-net-and-java,
( StringBuilder String('5', ite))
, :
private static string getStr(int p)
{
if(p == 0)
return "";
if(p == 1)
return "5";
string s = getStr ((p+1) / 2);
if( s.Length + s.Length == p )
return s + s;
else
return s + s.Substring(0, p - s.Length);
}
c 2 (n), ,
c 2 (n) = n + c 2 (⌈n/2⌉)
c 2 (n) = 2_n_ + d (n)
d (n) - -1, n 2 "" ( , ) , 0 m;
, d (n) m ∈ ℕ :
d (2 m) = -1
d (2 ) = d ()
d (m) = ( ) 0 m
c 2 O (n + log n), O (n).
.
OPs
c 2 (10 000) = 20 000 + d (11000011010100000 2) = 20 006
, , 7 .
- ,
"5". - OP , ,
String('5', ite). StringBuilder , StringBuilder(capacity).- , .NET.
- C (
'\0'!), , , .