
No.7
- 回答日時:
Aの計算とBの計算だけに着眼すればどちらも同じ計算量です。
ただ「プログラム全体の処理量」として考えれば「ループの為の計算」も行っておりますので後者の方が全体の計算量は増えます。以下は長いので興味があればお読みください。
・一つのループでAとBの計算をまとめて10回まわす
Aの計算x10、Bの計算x10、ループの計算x10
・Aの計算とBの計算をそれぞれ別の10回ループに分ける
Aの計算x10、Aのためのループ計算x10
Bの計算x10、Bのためのループ計算x10
となります。
そういう話題が盛んにされていた時代があります。高速化手法としてマニアな人がよくやってました(私もやってましたよ)。
ループ処理(の計算)に相当する部分をオーバーヘッドと言います。(本来目的としている)「Aの計算」「Bの計算」以外の計算処理を行っているわけですので「この部分の処理量を減らす」事が高速化に繋がります。
昔よくあったのは「同じ計算を2個並べるとループ数は半分で済む」と言う発想です。Aの計算と次のAの計算を並べて書くわけです。すると10回計算する必要があっても5回ループ済むわけです。ループ計算x5となり10回ループするより「やや高速化」が出来ます。
「高速化のためにループを使わず何百個も処理を羅列して
書いた時代もあった」
力技です。プログラムも読みづらくなりますし、気遣いも多くなります。そこで「コンパイラがアセンブラへ展開する時に自動でループ処理を省いて羅列に変換(展開)していた」という時代もありました。
「しかしループ展開を多用するとプログラム用のメモリ量
が増える。メモリが安くなった時代に重用された考え方
である。後にキャッシュメモリをはみ出すという事態に
なり、かえって遅くなると言われて消えた」
というわけでメモリより処理速度が尊ばれていた時代ではコンパイラ自体がループ処理を積極的に展開しておりました。CPU内にキャッシュを実装するのが当たり前に成ってからは「キャッシュメモリの消費量」の方が大事にされてしまいました。話が戻ってしまいました(単一の処理ループのサイズが巨大になると、小さなキャッシュ・エリアからはみ出す確率が大きく成り、キャッシュの読み直しと言うオーバーヘッドによって余計に遅くなる)
そして並列処理や並行処理、パイプライン処理と言う発想が出てくるとまた違ってきます。
「同時に計算しても処理矛盾を起こさない部分はどこなの
だろうか?」
Aの計算をした結果をBの計算で行うなど「順序関係」があるとAの計算とBの計算は同時に出来ません。しかし「順序的な制約が無い場合」はAの計算とBの計算を「複数のプロセッサで同時に手分けして計算」した方が早く成ります。コアが沢山あるCPUは早いとされていますが「プログラマの記述によっては恩恵が得られない」という場合も出てくるわけです。
「面倒な時代になった」
そのため「ここまでを塊とする」と宣言し「プロセッサに割り当てやすいようにプログラムを予め分けて置く」というやり方もあります。勿論、実際の割り当てがどうなるかは分かりません。そうしておくことで「並列・並行処理」を想定した記述であると評価される場合(どちらかと言うと言張る感じですがね)もあると言われていました。
ドレが良いのか分からなくなりますよね。
「結局のところ処理系(実際に動くときのマシンの都合)を
意識してしまうと汎用性に欠けてしまう。逆に遅くなる事
もありそうなのでプログラマは考えない方が良いだろう」
とされています。
ただし「工業製品や軍事兵器」の様なハード括りつけのソフトの場合は「ハードの都合を考えてプログラム構造を変える」事が必須に成ります。そういう場所で活躍できる人は意外と少ないので現代では希少でしょう。別格扱いされます。学問として習う場合も「高速化テクニック」を教えられる事はあると思います。
現代では「パイプライン処理を意識したコンパイラ」があり(C#などでも盛んに導入されている)ます。なのでループ構造だけで記述をするのは「ややトラディショナル」になっています(普通にループで処理するよりバカっぱやい)
と言う事で「計算量」だけに着眼していると「遅いプログラムしか作れない自分」に成ってしまうのでご用心です。
「単に正常に動いたというのではまだまだ甘い。記述
によって速度が変わるのか(その処理系で)何度も
試して『使えそうなモノ』を覚えて置くべき。ここ
でプロの腕の差が出てきてしまう」
例えばメタセコイヤと言う3Dメッシュ(ポリコン)のデザイン・ツールがあります。これのセーブ・データは別のツールでも読み込めるんですよね。
で気が付くことがあります。
「ん? 読み込み遅いなあ。データ大きいからかな?」
です。
「いや可笑しいだろ? 何でメタセコイヤの方は一瞬で
読み込めるんだよ? この違いは何だよ?」
ですよねえ。
と言う事で私も3Dプログラミングをするので「読み込み部分」自作してみたことがあります。すると「おっそ~い」と自分に幻滅。本家のメタ勢子のスピードに全く勝てません。
この時は「マシン語時代の若かりし頃の血」が騒ぎましたね。コンチキショウ「やってやろうじゃないか?」見たいに思いまして。高速化を(PCアプリの様なものでも高速化記述は可能である)やりました。結果「本家とそん色ないスピード」で読めましたよ。
その時思ったのは「高速化は意識しても意味がない」と言う定説は全くの嘘で「実際に数百倍の差が出る」と言う事です。
「2分かかった読み込みが秒かからん」
でまあ私がやった高速化ノウハウは今の時代ではロスト・テクノロジーでしょう。殆どのプログラマは出来ないと思います。(メタ勢子作った人は普通にやってたわけですけど)この差がプログラマ同士で生じてしまうという事が怖いんですよ。普通にやってたら逆立ちしても勝てんという相手が出てくるのでこの世界は面白いんです。
「通常の3倍のスピードどころじゃない。100倍くらいの
処理速度で差を付けられる。そしてどう頑張ってもその
速度を出せないプログラマが大量にいる。未だにこうい
うガチの世界」
こう言う話を誰か漫画にしてくれないかと思いますが(分かる人の方が少ないので)中々ありませんなあ。足指まで使ってキーボードを叩きまくる謎のハッカーが描かれるだけです。曲芸ですかね。
以上、蛇足でしたがご参考になれば。
No.6
- 回答日時:
「計算量」をどういう定義で使っているかによります。
コンピュータ工学分野で計算量というと、いわゆる「オーダー」のことになります。
https://ja.wikipedia.org/wiki/%E8%A8%88%E7%AE%97 …
これはおそらく変わりません。
実行命令数とか実行時間(クロック)等を指しているのなら
ループは1つの繰り返し毎に継続するかの判定が行われます。
同じ回数のループが2つあれば判定回数は2倍になります。
ただ、昨今では
・ループ判定くらいは一瞬
・最適化とかキャッシュ等の仕組みとかで命令数がそのまま速度になるとは限らない
等があり「やってみないとわからない」こともあります。
No.4
- 回答日時:
コンパイルしたオブジェクトの計算量だけを見ると同じに見えますが、実行時にオブジェクトを先読みしたキャッシュヒット率を考えると、ループせずに真っすぐ実行した方が高くなりますので、一つのループの方が実行速度は速くなります。
No.3
- 回答日時:
答えは同じになるとしても、
ループというのは簡単に言うと、
i に 0 を代入する
Aという計算処理を行う
i に 1 を足す
i が一定数以上であるか比較し一定数未満である場合は最初に戻る
という処理です。
ループ処理自体が、演算と判断を含んでいるので、
一つのループで処理したほうが効率の良い場合もあります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# numpyスライス機能を使った数値計算 2 2023/05/08 16:01
- 統計学 t値の計算方法 1 2022/11/29 18:37
- 工学 電磁気学についての質問になります。 画像のような2つのループ電流相互に働く回転力を求める問題です。 1 2022/11/21 15:40
- 物理学 電磁気学についての質問になります。 画像のような2つのループ電流相互に働く回転力を求める問題です。 1 2023/02/08 21:36
- その他(自然科学) 科学技術計算の仕事について 2 2023/02/04 18:09
- 数学 賃料と専有面積のデータが60部屋分ほどがあり、 賃料÷専有面積(=1㎡あたりの賃料)の数式で計算する 2 2023/02/18 20:33
- 小学校 計算のルールが理解しきれておらず悩んでいます 計算の工夫問題です 9997×9997−9995×99 2 2023/09/09 08:07
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- 財務・会計・経理 賞与引当金の計上について計上が必要かどうかまとめてみました(1月決算) 認識違うぞということがあれば 1 2023/07/24 17:17
- 数学 ピラミッド計算の仕方を教えて下さい。 5 2023/01/03 16:04
このQ&Aを見た人はこんなQ&Aも見ています
-
C/C++って何ですか?C言語やC++とは別物なのでしょうか?
その他(コンピューター・テクノロジー)
-
「再帰的」の意味がよく分からないのですが子フォルダにも孫フォルダにもプログラムを適用するって事なので
その他(コンピューター・テクノロジー)
-
架空情報、ダミー情報を作る具体例
その他(コンピューター・テクノロジー)
-
-
4
C言語やC++はRustに取って代わられるのでしょうか?
その他(コンピューター・テクノロジー)
-
5
上りとアップロードは同義語なのでしょうか?下りとダウンロードは同義語なのでしょうか?
その他(コンピューター・テクノロジー)
-
6
コマンドプロンプトを今から学ぶのは時代遅れなのでしょうか?やはりコマンドプロンプトではなくPower
その他(コンピューター・テクノロジー)
-
7
LinuxのUbuntuのアップデートについて
UNIX・Linux
-
8
実行ファイルとは
その他(コンピューター・テクノロジー)
-
9
赤信号歩行者に対するPayPayからの警告メッセージシステムについて
その他(コンピューター・テクノロジー)
-
10
コマンドプロンプトやPowerShellは100年後にも残っていると思いいますか?消えていると思いま
その他(コンピューター・テクノロジー)
-
11
フロントエンドエンジニアをしていますが、スキルアップのための転職、異動は3年目では早すぎますか? 今
その他(プログラミング・Web制作)
-
12
Linux用のインストーラー(USB)をWindows11で作成
UNIX・Linux
-
13
bashやcmd.exeで出来る事をPythonでする場合はbashやcmd.exeを使わないといけ
その他(コンピューター・テクノロジー)
-
14
パソコンが開発された原因は男性が早くエロコンテンツを見たいからですか?
その他(コンピューター・テクノロジー)
-
15
プログラミングの仕事のうちAIによってなくなるのはどれなのでしょうか?Webサイトを作成する仕事はノ
その他(コンピューター・テクノロジー)
-
16
LinuxはオープンソースなのでLinuxにもしウイルスをLinuxを作っている組織であるLinux
その他(コンピューター・テクノロジー)
-
17
Pythonはbashやcmd.exeを使わずにファイルを削除する事は出来ないって本当ですか?
その他(コンピューター・テクノロジー)
-
18
www.tekitou.jpというサイトがあり、そのサイトのipv4が10.123.45.67だとし
その他(セキュリティ)
-
19
PythonとPowerShellってどちらの方が習得に時間がかかるのでしょうか?
その他(コンピューター・テクノロジー)
-
20
C言語はbashやcmd.exeを使わずにファイルを削除する事は出来ないって本当ですか?
その他(コンピューター・テクノロジー)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
CSVファイルの特定の行だけを読...
-
VB2010でCSVファイルの読み込み
-
流れ図(フローチャート)が分か...
-
GIFアニメをループさせたくない
-
vb.netです。2次元配列の要素を...
-
VBA for i=1 to lastrow
-
アクティブセルから、A列最終行...
-
Escキーを押すと、中断する時と...
-
データベースをEOFまでループさ...
-
エクセルの当番表を作っていま...
-
VBAでの一時停止と再開の方法
-
DOSコマンドのループ内のTIMEコ...
-
乱数の桁数指定、または範囲指定。
-
レインボー色ってどうやって表...
-
範囲指定したセルを1つずつ飛...
-
EXCEL VBA ユーザーフォームの...
-
テキストボックスの名前に変数...
-
ボタンが押された時にループか...
-
CASL2のアセンブリ(?)で質問...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UWSCの終了の仕方
-
画面を強制的に再描画させる方法
-
Escキーを押すと、中断する時と...
-
範囲指定したセルを1つずつ飛...
-
vb.netです。2次元配列の要素を...
-
VBAで3秒だけ時間を止めたい
-
エクセルの当番表を作っていま...
-
UWSCに制限時間を付けたいです
-
DOSコマンドのループ内のTIMEコ...
-
VBAでの一時停止と再開の方法
-
CSVファイルの特定の行だけを読...
-
DoEventsが必要な理由について
-
GIFアニメをループさせたくない
-
VBA for i=1 to lastrow
-
Do whileでExitせず、ループの...
-
VBA Boxが空白の場合のメッセー...
-
vb.netからエクセル関数書き込み
-
イベントの発生を待つ
-
乱数の桁数指定、または範囲指定。
-
エクセル関数で1〜12の数字がル...
おすすめ情報