
No.5ベストアンサー
- 回答日時:
とりあえず、O()が計算量の増え方を表すための記号である、というところはOkなのでしょうか?
>それは1/2が微量だということです
「微量」という書き方がまずかったですね。「定数」です。データ量に依存しないので、無視します。と、本にも書いてあると思います。
計算量がどれくらいの勢いで増えていくかというのを見るためのものなので、実質的には
・O(1) … ハッシュなど データ数によらずに常に一定
・O(n^2) … バブルソートなど データ数により急激に増える
・O(nLog(n)) … クイックソートなど データ数による増え方が緩やか
・O(n) … リストへの挿入など データ数による増え方が単純にデータ数に依存
くらいしか、使いません。ここで、「1」や「n^2」などより、「データ数によらずに常に一定」や「データ数により急激に増える」の方が重要なのです。いわば、この言葉を表すための便宜上の記号といってもいいかもしれません。
n^2も、n(n-1)/2も、結局nとn(に近い値)を掛け合わせているので、右肩上がり、しかも急激に増えていきます。この「急激に増える」というのが知りたい/示したいのです。確かに計算そのものの回数は半分ですが、この「O()」が表したいのは、1億回処理するか、5千万回処理するか、ではなく、
『データ量が増えたときに処理する回数がどのような増え方をするか』
ということです。エクセルでグラフを描いてみると、よくわかると思います。「増え方」を見るので、実際の計算回数が半分だろうが百万回少なかろうが、関係ないのです。くれぐれも、「何回増えたか」ではないですよ。
「回数」ではなく、「増え方」を見るのです。と、他の方も書かれているのですが、それが理解できませんか?そのことを説明するための文にたいしてつっこんでいますけど。
#2: 「回数がどのように変化するかを大まかにみる指標」
#3: 「計算負荷の増え方を示す事ができるOという擬似関数」
「「増え方の度合い」とでも言う」
#4: 「計算の回数の“増え方”を表現するもの」
つまり、(n log n)は、nが決まったときの特定の数値(もしくは計算の方法)を表し、O(n log n)は、「データ数による計算回数の増え方が緩やか」であることを表します。
ご返信ありがとうございます。
なるほど、そういう意味だったのですね。
O()は増え方を表していたのですね。
私はよく、ささいなことが気になり何日も悩む傾向にありますが
この問題も「バブルソートは急激に処理が増えるんだな」程度で軽く流し、さっさと次のページへ進んでしまえば良かったですね。
関係ないですが今読んでる参考書は以前読んだとても分かりやすい参考書と同じ出版社の物なのですが、これがクソみたいに分かりにくくミスプリも、いたるところに発見します。
今後は出版社で本を選ぶのはやめようと思いました。
追伸:「「回数」ではなく、「増え方」を見るのです。と、他の方も書かれているのですが、それが理解できませんか?」
→悪かったですね理解力がなくて。
でもバカをバカにしてはいけませんよ。
バカはバカなりに一生懸命考えているのですからw
No.6
- 回答日時:
>→悪かったですね理解力がなくて。
バカにしたわけではありませんが、そのようなとらえられ方をするような書き方であったなら謝ります。申し訳ありませんでした。
#2『要はOというのは飾りみたいなもので特に省略しても式の意味は変わらないということでしょうか。』
『(n^2)の頭にOが付くことによって式の値が変わるのでは』
#3『よってO(n log n)がよく分からない場合はOを省いて(n log n)だと思えばいいですね。』
#4『n(n-1)/2がO(n^2)なので、これのOを省くとn(n-1)/2≠(n^2)となり、おお確かに全く違いますね。』
これらのことより、『どこまで理解ができているのか確かめたかった』のです。それによって書き方、説明のポイントを変えなければならないですから。
>この問題も「バブルソートは急激に処理が増えるんだな」程度で軽く流し
いえ、疑問を持つことは大切なことです。疑問を感じなければ、学ぶことはありません。また、こうして疑問を投げていただくことにより、わかっている人も理解を進めることが出来、また『どこがわからないか』を知ることができます。このことは、教師になろうという人にはもちろん、企業でも新人教育などにとても有効なことです。
>また「10の時は100、100の時は10000。どちらにしても、同じ「100倍」」とありますが
>10000は100の100倍ですが100は10の10倍だと思うのですが、これは単なるタイプミスですか。
1.nが例えば10の時は「10*(10-1)/2=45」ですが、nが100になれば4500になります。
2.n^2で計算すると、10の時は10^10=100、100の時は100^100=10000。
(n^2)とn(n-1)/2のどちらにしても、nが10倍しか増えていないのに対して、回数は100倍に増えています。
再返信ありがとうございます。
まあ確かに阿呆な奴に、ものを教えるのは骨の折れることで相手がどのくらい理解しているかを確かめようとすれば必然的にバカにしたような発言になってしまうのでしょうね。
僕の周りには僕よりもさらに阿呆な奴がいて、そいつらに何か教えるときは「そんなことも分からないのか」というような口振りで相手を小馬鹿にしながら教えています。
だから実は僕も人のこと言える立場じゃないのでしたw
疑問を持つことは大切なことです、とのことですので今後も本サイトにお世話になりたいと思います。
些細な疑問もビシバシ投げつけていきますので、受け止めてください。
最後の10倍100倍の箇所はミスタイプでもなんでもなく、ただ私が受け取り間違えただけだったのですね。
増え方は、どちらの式でもいっしょということですね。
あ、こっちは本当にミスタイプ発見かも
「n*(n-1)/2」でnが100になれば4500→4950w
No.4
- 回答日時:
こんにちは。
>Oが付くと、ぴったりとその値になるとは言い切れないが、
>だいたいそのくらいの値になるといったようなかんじでしょうか。
>数学の記号でいえば≒のようなかんじですね。
>よってO(n log n)がよく分からない場合はOを省いて(n log n)だと思えばいいですね。
(n log n)は数式で、O(n log n)は「O」という関数です。高校くらいで「f()」ってやりませんでした?これはfunctionのfですが、これと同じ表記です。
計算量を求める関数をO(OrderのOです)と定義し、その関数の値を求める計算式を「n log n」と定義します。したがって、Oを省くと「関数」が「数式」となり、全く意味が変わります。
計算の回数の“増え方”を表現するものなので、定数的な部分は省略…というか、考えません。「n(n-1)/2」の場合、回数が増えれば1/2も微量なので省き、当然-1も微量なので省きます。
バブルソートの回数は、nが例えば10の時は「10*(10-1)/2=45」ですが、nが100になれば4500になります。nが10倍になっているのに対し、計算回数は100倍になっています。n^2で計算すると、10の時は100、100の時は10000。どちらにしても、同じ「100倍」ですよね。この「100倍」というのを知るため(「求める」ではない)の関数です。
数式はnがある一定の値、つまり「点」を見ますが、Order関数はnが連続する「線」を見ます。
ご返信ありがとうございます。
うーん、なんか更に泥沼にはまってしまったような感じです(汗)。
f()については多分、高校でやったのだと思いますが忘れちゃいました。
というより数学の時間は、たいてい夢を見ていましたので(汗)。
Oを省くと全く意味が変わってしまうのですか。
n(n-1)/2がO(n^2)なので、これのOを省くとn(n-1)/2≠(n^2)となり、おお確かに全く違いますね。
しかし、やっぱり良く分からん。
あと、もう1つ解答文中に疑問の残る箇所があります。
それは1/2が微量だということです。
1万円札と5千円札の違いは私にはとても微量とは思えないのですがコンピュータの世界では微量ということでしょうか。
しかしコンピュータでも5000万の処理をするのと1億の処理をするのとでは、けっこう差が出ると思うのですが、そういう問題ではないのでしょうか。
また「10の時は100、100の時は10000。どちらにしても、同じ「100倍」」とありますが
10000は100の100倍ですが100は10の10倍だと思うのですが、これは単なるタイプミスですか。
以上のことについて、よろしければ、お暇なときに再度ご回答いただけませんか。
ところで私は一応、普通科の高校を卒業しましたが高校生ほどの学力、というか理解力がありません。
ですので、ご解答の際には小中学生でも理解できるような簡単な文章をいただけると大変助かります。
お手数をおかけしてスミマセン。
No.3
- 回答日時:
O(n log n)っていうのは、データ量nの増減に合わせて、
(n log n) の形で計算量が増えていくような計算方式の事を言っています。
つまり、n log n の計算効率を、O(n log n)という表現で表わしているだけですね。計算負荷がわかるわけではないのですが、計算負荷の増え方を示す事ができるOという擬似関数を用意するとして、その計算方法が、n log n ですよ、というような感覚でしょうか?
orderは、整頓という意味ではなく、数学で使う表現の、「xx次」という意味です。日本語でいうなら、「増え方の度合い」とでも言うのでしょうか? O(n^2)なら、データ量が100倍に鳴るたびに、計算量は100^2=10000で10000倍に膨れあがる、つまり大規模処理に向いていない、という事を示しています。(O(n)なら100倍、O(n log n)なら664倍)
参考URL:http://210.150.25.33/cache?uri=http%3A%2F%2Fwww. …
ご返信ありがとうございます。
Oが付くと、ぴったりとその値になるとは言い切れないが、だいたいそのくらいの値になるといったようなかんじでしょうか。
数学の記号でいえば≒のようなかんじですね。
よってO(n log n)がよく分からない場合はOを省いて(n log n)だと思えばいいですね。
No.2
- 回答日時:
#1の補足?
オーダー 必要な処理(ソートなら比較・入れ替え)の回数がどのように変化するかを大まかにみる指標のはず。
確か、バブルソートは O(n^2) でしたっけ? つまり、データ数 n が増えると、n^2 のように急激に必要な処理回数が上がります。
効率のよい シェルソートなどは O(n log n) で、データ数 n が大きくなっても n log n は n^2 のように急激には増えないので、処理回数が少なくて済む(=効率がいい)ことになります。
ご返信ありがとうございます。
うーん、未だに良く分かりません(汗。
要はOというのは飾りみたいなもので特に省略しても式の意味は変わらないということでしょうか。
しかし今私が読んでる参考書によると例えばバブルソートの比較回数はn(n-1)/2・・・・O(n^2)となっているのですがn(n-1)/2と(n^2)では倍以上の差があるので(n^2)の頭にOが付くことによって式の値が変わるのではと思ったのです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 数学 log底10真数1/75 ただし、 log底10真数2=0.3 log底10真数3=0.5とする 式 2 2022/05/30 22:51
- 数学 数学3の微分法・対数関数の導関数に関しての質問です。 [ ] は絶対値を表しています。 y=log[ 3 2022/05/24 14:07
- 数学 n乗はどうなったのでしょうか 1 2023/01/31 19:26
- 数学 写真の数学の質問です。 常用対数ってのがいまいちわかりません。 log(10)3が、なぜlog(10 5 2023/06/10 14:07
- 化学 化学が得意な方に質問です。この問題の正解を教えて欲しいです。 【問題1】Log Kowの記述について 1 2022/09/26 23:44
- 数学 回答者どもがなかなか答えられないようなので、考えてみました。 ∫[0,π/2]log(sinx)/( 4 2022/08/31 16:30
- 数学 対数関数のグラフ y=log(2)2(x+1)のグラフを書け 模範解答は「1+log(2)(x+1) 2 2023/07/08 01:51
- 数学 複素数についての質問です。 1+iの主値を求める問題で回答が以下のようになっていました。 1+i = 5 2022/07/22 04:04
- 数学 微分方程式の積分定数について 5 2023/07/13 08:39
- 数学 {n!(1-log(Σ[k=0→n]1/k!))} (n=1,2,…) という数列は単調減少ですか? 2 2022/03/26 21:02
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでeのマイナス乗の計算...
-
SQLServerで変数を含んだ数式の...
-
Excel 隣のセルが空白以外の場...
-
コンピューターで2進法が採用...
-
SQL JOIN結果での計算と端数処理
-
アクセスである時点での年齢を...
-
VBAでエクセルシートを更新...
-
マクロボタンを押すと、ファイ...
-
「24日の0時」って・・・
-
日付の大小の表現
-
エクセルで最高値、最低値の日...
-
エクセル マクロ 名前を付けて...
-
回覧板の日付について質問です...
-
「時間」、「期日」、「日付」...
-
excelで、セル内に文字が入力さ...
-
エクセルで数字から名前に変...
-
Excel関数 「日付を入力...
-
エクセルのチェックボックスを...
-
SQL2008での年度の取得方法
-
エクセル 条件が成立した場合...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 隣のセルが空白以外の場...
-
コンピューターで2進法が採用...
-
アクセスである時点での年齢を...
-
【ACCESS】未定義関数が発生。...
-
ACCESSでの時間外計算方法
-
計算結果をCASE WHENで判断した...
-
ファイルメーカーで小数点以下...
-
ACCESS で深夜計算
-
エクセルで四捨五入ではなく、5...
-
ACCESSのバグ?
-
エクセルでeのマイナス乗の計算...
-
ファイルメーカーで学年を表示...
-
Mysql 誕生日順に並べたい
-
チェックデジットを付加したデ...
-
ファイルメーカーで時間の表示...
-
ファイルメーカーPro7での経過...
-
SQL Server での小数点以下の「...
-
アクセスについて
-
Accessで子供の学年齢を求めた...
-
SQLServerで変数を含んだ数式の...
おすすめ情報