アルゴリズムに関して全くの初心者なので、お力を貸してくれると幸いです。
タイトルにもありますが、かけ算を使ってのアルゴリズムですが、足し算なり、引き算なりを使ったほうが効率がいいのですが、どのようにすればいいのか悩んでおります。
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で質問しましょう!
似たような質問が見つかりました
- その他(パソコン・スマホ・電化製品) 挿入ソートとマージソートを比較すると,挿入ソートのほうが計算量は少なく,効率的なアルゴリズムである。 1 2022/11/30 17:31
- 計算機科学 アルゴリズムについて 1 2023/01/01 19:43
- 計算機科学 これは迷路を解くというよりも、いかに速く最速で走り切れる経路を見出せるかや、マシン性能、プログラミン 3 2023/07/17 16:27
- その他(プログラミング・Web制作) プログラミングって本来数学的な計算をする為のものではないのですか? 学校で配られたFortran90 11 2022/08/25 22:14
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- その他(プログラミング・Web制作) Visual Studio Code 関数の使い方について 3 2023/05/31 13:15
- 数学 数学的な意味が見いだせない指標(野球篇) 6 2023/05/13 20:37
- その他(社会・学校・職場) 誰か聞いてください。 社会人6年目ですが、私はポンコツすぎますか? 上司にとあるAファイルの数式を全 1 2023/08/10 18:25
- 数学 特定の座標点を通る回帰を行う方法について。 2 2022/10/10 10:27
- 数学 M種類の部品からN種類の部品を抽出する効率的なアルゴリズム 2 2022/04/22 16:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正しい五十音順について
-
【VisualBasic】ユークリッドの...
-
あいまい検索(文字列一致率)
-
障害物回避プログラム
-
ライントレース アルゴリズム
-
ガウス・ジョルダン法のプログ...
-
プログラミング
-
期間重複チェックがわかりません
-
一般的な解法を用いないで魔法...
-
パズルが好きな人ってプログラ...
-
[ EXCEL VBA ] 図形を読み込む...
-
BCDについて
-
C♯で電卓を作成しています。演...
-
アルゴリズムとプロトコールの違い
-
グループを均等に分けるには?...
-
openSSLのAES暗号化アルゴリズ...
-
Dijkstraて
-
Stuck
-
多変数関数の最小値を求めるプ...
-
vbaで、連立方程式を解く方法に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
正しい五十音順について
-
Dijkstraて
-
Stuck
-
[ EXCEL VBA ] 図形を読み込む...
-
BCDについて
-
アルゴリズムとプロトコールの違い
-
期間重複チェックがわかりません
-
グループを均等に分けるには?...
-
三次元形状曲面の導出法
-
あいまい検索(文字列一致率)
-
Visual studio2019 C#で生まれ...
-
gooという検索エンジンの後にGo...
-
フリーセルの難易度について
-
C♯で電卓を作成しています。演...
-
経路探索について
-
CRC-CCITT16の算出法
-
理系の高校生です。大学で情報...
-
詰め将棋をとくのは、アルゴリ...
-
偏りのある乱数のアルゴリズム
-
OpenCVのライセンスについて
おすすめ情報