C#およびC / C ++には、(可能な)数値を表す文字列に特別な情報はありません。したがって、変換時に文字列を1桁ずつ解析する必要があります。
ただし、桁数には制限があるため、O(1)だけが得られます。変換時間は制限されます(通常、最大数の変換によって)。32ビット整数の場合、変換では最大10桁の10進数(および場合によっては符号)を考慮する必要があります。
文字列からの変換も実際にはO(1)です。これは、文字列の解析中に、制限された文字数(32ビットintの場合は10 + 1)のみを考慮するだけで十分だからです。
厳密に言えば、O
intの最大値には制限があるため、intから文字列への変換の場合に-notationを使用することはできません。とにかく、(両方向の)変換に必要な時間は定数によって制限されます。
@Charlesが示唆しているように、他の言語(Python)は実際には任意精度の数値を使用できます。このような数値を解析する場合、時間はO(number of digits)
、でO(string length)
ありO(log(number))
、両方の変換でそれぞれです。任意精度の数値では、両方の変換ですべての桁を考慮する必要があるため、これを高速化することはできません。精度が制限された数値との間の変換についても、同じO(1)
理由が当てはまります。ただし、Pythonでの解析のプロファイルを自分で作成しなかったため、効率の低いアルゴリズムが使用されている可能性があります。
編集:@Steveの提案に従って、C / C ++およびC#での解析で最初の空白がスキップされることを確認したため、string->int変換の時間は実際にはO(input length)
です。文字列がトリミングされていることがわかっている場合、変換は再び行われO(1)
ます。