2

配列と次の関数が与えられたとしますreplace

void replace(from, to, items[])

その仕事は、範囲内の配列要素を 内の要素に置き換えること[from, to)ですitems
配列の最大サイズは事前にわかっていると仮定して、配列がオーバーフローしないようにします。

私の質問は、置換のリスト(フォームの要素など)が与えられた場合、各操作を順番に実行するより(from, to, items)も時間の複雑さで最終結果の配列を取得することは可能ですか?

言い換えれば、一連の操作を事前に知っておくことには利点がありますか、それとも各操作を 1 つずつ与えることに勝るものはありませんか (漸近的な時間の複雑さの点で)?

注:質問がわかりにくいようです。特定の範囲を置き換える要素の数がその範囲のサイズと同じであることを意味するつもりはありません! それが少なくても多くても、シフトの原因となる可能性があり、質問のポイントは、それらを事前に知っていれば、最悪の場合のシフトなどの余分な作業を回避できるかどうかを尋ねることでした.

4

2 に答える 2

0

memcpyのレベルまで、常に線形です。それを高速化する唯一の方法は、時間をスペースと交換することです。配列添字演算子をオーバーライドして、元の配列ではなくと の間の要素が要素fromto指すようにします。これは、どのような状況でも良い解決策ではありません。items

于 2013-04-26T01:40:24.397 に答える