1

私は常に文字列を逆にするためのcコードを次のように実装してきました:

  1. 弦の長さまで、またはその長さの半分までループします
  2. 文字列の最後と最初にポインタを置く
  3. それらを1つずつ交換します。

しかし、私が言及したものとは別に、この問題の時間計算量を減らす最適化されたコードが必要です。グーグル検索を試しましたが、それに関連する解決策が見つかりませんでした。

4

2 に答える 2

4

「時間計算量」によって、係数と低次の項を除外するbig-O表記を参照している場合、C文字列を反転するための単純なO(n)アルゴリズムに勝るものはありません。

特定のマシン(またはマシンのクラス)が操作を実行するのにかかる時間を参照している場合、逆転を最適化するためのいくつかのアプローチがあります。典型的な最適化には、ループ展開、文字ごとではなくマシンワードごとの文字の消費、および終了するNUL文字のスマート検索が含まれます。自由に利用できるGNUlibcには、そのような最適化の例が含まれています。

ループ展開などの上記の最適化の一部は、コンパイラーを最適化することによって自動的に実装される場合があります。一部のプラットフォームでは逆効果になるものもあれば、文字列のサイズによってはスピードアップするものもあります。場合によっては、手書きの最適化が、コードを最適化するためのコンパイラー自身の努力を妨げる可能性があります。事態を悪化させていないことを確認する唯一の方法は、意図した使用法をカバーするベンチマークを開発し、進行するにつれてコードを綿密にベンチマークすることです。

于 2012-11-15T17:48:14.780 に答える
0
for(fctr=0,bctr=len-1;fctr<len/2;fctr++,bctr--)
{ 
    temp=str[fctr];
    str[fctr]=str[bctr];
    str[bctr]=temp;
}

これは速く動作するかもしれません!

于 2013-01-26T15:14:14.423 に答える