0

私には2つのことをしなければならない関数があります:

  • n*n*n配列をトラバースする
  • アレイの状態に応じてピンを更新します

この関数は繰り返し実行されます。

関数の作業を実行するための2つのアルゴリズムがあります。

  • まず、配列全体をトラバースし、複雑さTh(n**3)を伴いますが、操作は最小限digitalWriteで、おおよそTh(n)です(特定のピンの状態は隣接するピンの状態に依存するため)。

  • 次に、配列の一部をトラバースしてがありますがTh(n**2)、最大のdigitalWrite操作がありTh(n**2)ます。

私が持っている質問:

  • 小さいn場合は、どちらのアプローチを取るかは重要ですか?

  • digitalWrite3次元配列アクセス操作と比較して、操作はどのくらい費用がかかりますか?(一方を最適化すると、もう一方への呼び出しが増加します。)

4

1 に答える 1

0

あなたの特定の機能の知識がなければ、これは合理的に答えることはできません. それが重要かどうかさえ不明です。一般に、パフォーマンスの問題に対する適切なアプローチは、両方の方法を実装して測定することです。特に n が小さい場合、このようなものを理論から導き出すことはできません。

私の提案は、実装と理解がより簡単なアルゴリズムを使用することです。動作したら、パフォーマンスが十分かどうかを試すことができます。それでいいなら。問題が解決しました。それ以外の場合は、微調整と最適化を開始できます。

digitalWrite のパフォーマンスが問題になる場合は、いつでも直接ポート操作に戻すことができます。しかし、すでに述べたように、まずそれを機能させてください。

配列トラバーサルが問題になる場合は、いつでも配列を低次元の配列にマップし、トラバーサル関数を適応させることができます。多くの場合、これによりパフォーマンスも向上します。

于 2013-02-06T17:35:30.257 に答える