
アルゴリズムに関して全くの初心者なので、お力を貸してくれると幸いです。
タイトルにもありますが、かけ算を使ってのアルゴリズムですが、足し算なり、引き算なりを使ったほうが効率がいいのですが、どのようにすればいいのか悩んでおります。
x=a*b-c*c+bd
y=b*b-cc+a*d
と全部で6つののかけ算があります。
新しい変数(例えば、temp=c*c のような)を作ってもかまいませんので、
かけ算の使用回数を3回までに押さえたいのです。
私が考えたのは、
x=b(a+d)-temp
y=b(b+a)-temp+a(d-b)
ほかに効率の良いアルゴリズムはありますでしょうか?
よろしくお願いします
No.7
- 回答日時:
全部足し算にしたいのであれば、
たとえばa*bを
int i;
for (i = 0; i < b; i++)
{
a += a;
}
で全て足し算にできます。
でもコストが高くなります。
私が提示したwikiを呼んでください。
コンパイラがコードを最適化している文法についても取り上げられています。
コストが高い低いはコンパイラの動作に習うのが最もよいと思いますよ。
たとえば、
共通式削除(common sub-expression elimination)
"(a+b)-(a+b)/4" という式があったとき、"(a+b)" が2回出現する共通式である。共通式削除では、"(a+b)" がこの間に変化しないと判断し、1回だけ計算するよう最適化する。
定数畳み込み(constant folding)と定数伝播(constant propagation)
定数からなる式(例えば、"3 + 5")をコンパイル時に計算結果("8")と置き換えてしまう。最近の言語処理系ではほとんど必ず行われる。

No.6
- 回答日時:
>アルゴリズムの課題として6回のかけ算を3回にとどめるということなのです。
>言葉足らずでもうしわけありません。
ということは、足し算なら何回やってもよいのですか?
そうであれば、かけ算を足し算に変えられるので、かけ算の回数=0を実現できます。・・・が、このようなものは、望んではいないのでしょうか。
No.4
- 回答日時:
アルゴリズム以前に、数学の問題では?
(展開の逆ってなんて言うんでしたっけ。)
y=b*b-c*c+a*d
これがどうなってこうなるのかわかりません。。。
temp=c*c
y=b(b+a)-temp+a(d-b)
+a*b-a*bが増えて複雑化してるだけのような気がしますが。
この回答への補足
仮に
y=b*b-c*c+a*d
という条件で、このままだとコストが高いから、足し算なり、引き算を付け加えてコストを下げようと言う考えてでいきたいのですが、上記の変換ではよけいにコストがあがってしまいますか?
No.3
- 回答日時:
p = (b+c)*(b-c) → b*b - c*c
q = b*(a+d-b) → a*b + a*d - b*b
r = a*d
x = p + q → b*b - c*c + a*b + b*d - b*b → a*b - c*c + b*d
y = p + r → b*b - c*c + a*d
中学生の因数分解みたいですね。
No.1
- 回答日時:
このあたりをじっくり読んでみてください。
ソースは基本的に、視認性を最重視したほうがよいのではないでしょうか?
x=a*b-c*c+b*d
今回は変数名が短いため、今のままでも十分見やすいですしこのままでも十分では?
変数が長くてみずらいのであれば、
int multipul_ab
int multipul_cc
int multipul_bd
multipul_ab= a*b
multipul_cc= c*c
multipul_bd= b*d
//算術の途中経過が正しいかを確認できる。
x=multipul_ab - multipul_cc + multipul_bd
などと記述する意味が出てきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正しい五十音順について
-
G4圧縮をTIFに変換アルゴリズム...
-
アルゴリズムの説明について
-
あいまい検索(文字列一致率)
-
BCDについて
-
画像で示した条件に合うC言語の...
-
アルゴリズムとプロトコールの違い
-
ゲームプログラミングC/C++、SR...
-
c言語で画像から文字を認識 キ...
-
乱数って・・・
-
アルゴリズム(2分探索木)の問題...
-
Pythonと数学
-
ルービックキューブを揃えるた...
-
経路探索について
-
最大公約数を求めたい!
-
(文字列検索の手法について)...
-
VBAで関数をつくる
-
65536は2の何乗なのでしょうか?
-
VBAで仕様書は書きますか?
-
あるプログラムのコマンドライ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
正しい五十音順について
-
C♯で電卓を作成しています。演...
-
一番近い組み合わせを見つけるには
-
シードを考慮したトーナメント...
-
アルゴリズムとプロトコールの違い
-
グループを均等に分けるには?...
-
多変数関数の最小値を求めるプ...
-
期間重複チェックがわかりません
-
5人のテストの点数を入力すると...
-
プログラミングをしたいのです...
-
ハノイの塔のさいきアルゴリズ...
-
マージソートの比較回数の計算...
-
トップダウン解析とボトムアッ...
-
ハッシュアルゴリズム
-
フリーセルの難易度について
-
diffのアルゴリズムについて詳...
-
最大公約数を求めたい!
-
書籍のソースコードを別言語に...
-
C# 再帰よるスタックオーバー...
-
データを圧縮したい
おすすめ情報