プログラミング

BigIntegerの再実装を着々と進める
はずなんだけど、プログラムの構成にちょっと困った問題が出てきた。
実際高速化するには、有限体の元を表すInt配列のサイズをその体のサイズに合わせ
無駄な操作を一切省くのがベストなんだけど、
それをやると有限体のサイズを変更するたびに
演算クラスをそれに合わせて準備する必要がある。
これだとすぐに使えるサイズが決められてしまい、汎用性を著しく損ねるし、
メソッドオーバーロードでメソッド数を増やすにしても、
有限体のサイズを変えるたびに新たなメソッドを作らなくてはならない。
何とかインターフェイスとかをうまく使って、クラス継承の関係から処理したい。
実はインターフェイスの操作には不慣れでとても困った。
有限体の元を納めるFieldElementというインターフェイスを作り、
これを参照してIntの配列数を変え、メソッドをそれに最適化したクラスで
インプリメントさせるつもりが、かなめとなるint配列をインターフェイス中で定義したときに、
サイズを設定しなきゃいけないとか怒られて、
どうにかできんもんかと悩んでる。
最初に小さいサイズを決めると後々容量足りないし、でかいと無駄なメモリを食う。
なんとかインターフェイスインプリメントしたクラスから、
インターフェイス中で宣言したメンバ変数配列の初期化を行わせる方法はないのか?
とりあえず、調査してみなきゃ。
 
って感じで今日はインターフェイスの使い方とポリモーフィズム関係をいろいろ調べた。
あと、JUnitの使い方もわかった。
毎日少しずず進歩してくぜ!!!
 

結局

上の話は結局メンバ変数の配列をインターフェイスに持たせないで、
インプリメントしたクラスに持たせ、
インスタンスではそれを呼び出すためのメソッドを定義しておくことで解決できた。
あまり利口じゃないかもしれないけど、とりあえずは動く。
ただ、書いてるプログラムはかなりのスピードアタックプログラムなので、
ミリ秒からマイクロ秒単位の速度向上も大事なので
ほかに方法はないかを模索しないとだめかも。