X



【O(n)】計算量の評価方法について【O(log n)】

■ このスレッドは過去ログ倉庫に格納されています
0002デフォルトの名無しさん
垢版 |
2013/03/21(木) 18:28:13.28
計算量について基本的なことなんですが教えてください。
このページに
http://imoz.jp/algorithms/imos_method.html
>記録には O(C) が,シミュレートには O(T) がかかるので,全体としての計算量は O(C+T) となります
と書いてありますが、ループを並べる場合ってO(max(C, T))ではなくてO(C+T)のように足し算してもいいんでしょうか?
0005デフォルトの名無しさん
垢版 |
2013/03/21(木) 22:57:18.98
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

                  京都大学霊長類研究所
0006デフォルトの名無しさん
垢版 |
2013/03/22(金) 01:45:09.35
O(定数+定数)=O(定数)

全部読んでないけど、この問題に出てくる C は定数の C じゃなくて、お客さんの数らしいんだよね。
で、C も T も入力時に与えられる変数で定数じゃないみたい。
0007デフォルトの名無しさん
垢版 |
2013/03/22(金) 01:45:47.23
蟻本見たらループ回数が変数のループを並べる場合の計算量はO(N+M)みたいな足し算になってたよ

そりゃそう書く事に意味があるからね
0010デフォルトの名無しさん
垢版 |
2013/03/22(金) 02:05:41.98
O(n)をO(log n)に出来るアルゴリズムの変更をしたが、
1要素を処理する為の計算量がm倍に増えた

仮にnが10000の時、
計算量が100倍に増えても
速度的には等価ってことであってる?
0012デフォルトの名無しさん
垢版 |
2013/03/22(金) 09:17:21.24
O(M+N)でM側が常にゴミ同然ならO(N)でいいだろうが
MとNのどちらが支配的になるかがMとNの大きさによるのであれば
O(M+N)と書くべき
0013デフォルトの名無しさん
垢版 |
2013/03/22(金) 09:18:02.09
グラフ探索で頂点の数がM、辺の数がNの時に探索のオーダーをO(M+N)と表すのが有名な例。
0014デフォルトの名無しさん
垢版 |
2013/03/22(金) 09:38:08.05
QuickSort の計算量の求め方が判らないんだけど
誰か解説して
0015デフォルトの名無しさん
垢版 |
2013/03/22(金) 09:39:37.84
O(M+N)って例えばO( m^2 + n )や O( m + log(n) )という書き方できるの?

MとNが常に同じ次元なら別々に書く意味はそれ程ないと思うけど、別のものを使えるなら、
分けて書かないと意味が違ってくるような気がする。
0017デフォルトの名無しさん
垢版 |
2013/03/22(金) 10:45:09.98
>>14
厳密な証明じゃないけど、入力(ソートする配列)のサイズを n として、パーティションのステップで n 、結果としてサイズ n/2 の配列が2つできる。2つのサイズ n/2 の配列に対してそれぞれクイックソートするから、合わせると

T(n) = n + 2T(n/2)

= n + 2{ n/2 + 2T(n/4) } = 2n + 4T(n/4)
= 2n + 4{ n/4 + 2T(n/8) } = 3n + 8T(n/8)
...
// 繰り返すと以下のようなパターンが見えてくる
...
= kn + 2^k * T(n / (2^k)) --------- (*)

になる。
T(n/(2^k)) の n / (2^k) が 1 になるとき、n = 2^k <---> k = log n

k = log n を (*) の式に戻してやると

= kn + 2^k * T(n / (2^k))
= n log n + n * T(1)
= O (n log n)
0019デフォルトの名無しさん
垢版 |
2013/03/23(土) 17:55:14.51
>>17
= n log n + n * T(1)
= O (n log n)
じゃなくて

T(n)
= n log n + n * T(1)

O ( T(n) )
= O ( n log n + n * T(1) )
= O (n log n)

ではないのですか?
002017
垢版 |
2013/03/23(土) 18:55:05.27
O 記法は、ある定数Cがあって、n がある程度大きいときに常に以下の式が成り立つとき

f(n) < C * g(n) ---------- (*)

f(n) = O(g(n)) と表記する。ってのが定義だから、この場合は T(n) = O(n log n) であってる。

最後端折っちゃったけど、つづき
T(n) = n log n + n * T(1)

T(1) は入力サイズにかかわらず一定なので定数 d とする。

T(n) = n log n + d * n

n がある程度大きくなれば常に d < log n なので

T(n) = n log n + d * n < n log n + n log n = 2 n log n

整理すると

T(n) < 2 n log n

O記法に戻って f(n) を T(n)、C を2、g(n) を n log n と対応させると T(n) = O(n log n)
アルゴリズムイントロダクションみたいな有名な本をちょっと見てみるといいよ。
0021デフォルトの名無しさん
垢版 |
2013/03/25(月) 13:47:30.00
>>17 >>20
ありがとうございます

以前なにかの本で読んだときは意味不明だったのですが
懇切丁寧な説明のおかげで多少理解が進みました
きっと前に見た本が糞だったのだと思います

>アルゴリズムイントロダクションみたいな有名な本をちょっと見てみるといいよ。

そうします
0023デフォルトの名無しさん
垢版 |
2013/03/25(月) 14:05:13.78
なんかリンクが可笑しいので訂正。

アルゴリズムイントロダクション 第3版の日本語版が出揃ってた
http://diary.overlasting.net/2013-01-02-2.html
アルゴリズムイントロダクション輪読会 01
http://diary.overlasting.net/2013-01-24-1.html
アルゴリズムイントロダクション輪読会 02
http://diary.overlasting.net/2013-01-31-1.html
アルゴリズムイントロダクション輪読会 03
http://diary.overlasting.net/2013-02-07-1.html
アルゴリズムイントロダクション輪読会 04
http://diary.overlasting.net/2013-02-14-1.html
0024デフォルトの名無しさん
垢版 |
2013/03/25(月) 14:06:31.10
NHNってLINE(ハ○ゲ)の会社か
0025 忍法帖【Lv=40,xxxPT】(1+0:5)
垢版 |
2013/03/25(月) 16:09:11.43
なかなか良スレだと思うけど
逆に言えばこういうの語られる場所はほとんど無かったわけで
計算量の見積もりとか語りにくい地味な話題なんだろうな
>>3
計算量もわからないのにこのスレいるの?とか話終わらす奴もいるし適当だと思わん
実際計算量見積もりとかまでやりだしたらごちゃごちゃするぜ?
0026デフォルトの名無しさん
垢版 |
2013/03/25(月) 16:19:10.51
迷路を解くアルゴリズムで
(出題される迷路は四角形でスタートとゴール以外の通路は全て繋がっていて
解答は一本道のみで浮いたループとかもないものとします)
1.各枝を順に探索して袋小路まで行ったら戻って続き(左手の法則とか)
2.各通路を最小の四角形の部屋に分け三方を壁で囲まれている部屋を全て壁に置き換え(繰り返し)
3.もっと速い何か
のどれが最速かとか計算量で考察出来ますか?
0027デフォルトの名無しさん
垢版 |
2013/03/25(月) 19:56:39.91
>>25
> 逆に言えばこういうの語られる場所はほとんど無かったわけで
> 計算量の見積もりとか語りにくい地味な話題なんだろうな

> 実際計算量見積もりとかまでやりだしたらごちゃごちゃするぜ?

いや、そういう積極的な意図や目的があって立てられたのならいいと思うよ。

ただ逃げるようにして立てられたのなら、結局同じだろと思ってただけで。
0028デフォルトの名無しさん
垢版 |
2013/04/01(月) 21:14:09.47
唐突ですまんが、
nPrの計算量は、O(n!)で表すのか?
0029デフォルトの名無しさん
垢版 |
2013/04/01(月) 21:34:18.21
>>28
O(n) でいいんじゃないの?
1) n! を計算するのに O(n) (for 文で 1 から n までを掛け合わせるだけ)
2) (n - r)! を計算するのに O(n) (手順は上と同じ。最大でも r = 0 の時で O(n))

トータルで O(n)

2) の (n - r)! の計算を先にやって覚えておいて、1) を計算するのに残りの n から n - r + 1 までの掛け算だけをやればもうちょっと手数は削減できるかも。結局 O(n) だけど。
0030デフォルトの名無しさん
垢版 |
2013/04/01(月) 22:25:38.26
質問は、たぶん nPr の値を計算するのに必要な計算量ではなく、
ある計算をするのに必要な計算回数などが nPr 回と見積もられたら、
ビッグ・オー記法では O(n!) になるのか、という事だと思う。
003228
垢版 |
2013/04/02(火) 12:45:51.99
>>29
ありがとうございます。
しかし、先ほどの質問は>>30の言う通り、「ある計算をするアルゴリズムの計算量がnPrとエスティメイトされたとき
ビッグ・オー記法ではO(n!)と表すのですか?それともO(n)ですか?」ということです。

>>31
本来はnPr=n!/(n-r)!ですよね?
003428
垢版 |
2013/04/02(火) 12:58:00.61
>>33
それは実際に計算してみると違いますが、O記法ではそうなるということですか?
003628
垢版 |
2013/04/13(土) 11:16:01.44
>>35
カキコするのとても遅れましたが、ありがとうございます。
そう表記するのですね。
0038デフォルトの名無しさん
垢版 |
2013/05/12(日) 11:23:49.97
BTreeで検索にかかる計算量を一定以下に見積もるために
(ほぼ)常にバランスを取る方法は色々あるようですが
それぞれの方法は同じ原理に基くものなのでしょうか?
0040デフォルトの名無しさん
垢版 |
2013/06/13(木) 09:48:20.28
O(オーダー)は計算量の上界、つまり
とある問題を解く場合に「これだけの時間があれば確実に解けます」という計算量を示す。

Ω(オメガ)は計算量の下界、つまり
とある問題を解く場合に、「どんなに頑張ってもこの問題はこれだけの時間がかかります」
という計算量を示す。
0041デフォルトの名無しさん
垢版 |
2013/06/20(木) 12:04:09.45
lim[x→a]f(x)=0
lim[x→a]g(x)=0
とする。lim[x→a]f(x)/g(x)=0
となるときf(x)はg(x)の高度の無限小といい
f(x)=o(g(x))と書くんだよな。
lim[x→a]f(x)/g(x)が定数になるときO(g(x))とかく。
ちなみに(a_n)がaに収束する列とするときf(a_n)/g(a_n)については条件を満たさなくていいし
上極限をΩ(g(x))下極限をO(g(x))と定義してO(g(x))をΘ(g(x))で定義する場合もあるんだよな。
もちろんlim[x→a]f(x)/g(x)が収束すればΘ(g(x))=O(g(x))だけどな。
0044!ninja
垢版 |
2013/11/10(日) 14:23:28.68
結局馬鹿いじりしたがるスレチの馬鹿ばっかりになったか
もういいよ
コミュ障ばっかりだからやめやめ
0045デフォルトの名無しさん
垢版 |
2013/11/11(月) 17:55:23.45
おお
こんなスレ立ってたのか
0049デフォルトの名無しさん
垢版 |
2014/11/09(日) 04:13:27.18ID:iOEsToOb
Do As Infinity
0050デフォルトの名無しさん
垢版 |
2015/02/05(木) 18:48:53.91ID:Wisgh0P5
Do It Yourself
0051デフォルトの名無しさん
垢版 |
2015/02/07(土) 18:33:03.78ID:5foNN6B4
When in Rome do as the Romans do.の意味や和訳。 《ローマではローマ人のするようにせよ》 「郷に入っては郷に従う」
0053デフォルトの名無しさん
垢版 |
2015/09/04(金) 20:19:26.41ID:6EQzrIAR
クイックソートの空間計算量に対する無理解について。
0054デフォルトの名無しさん
垢版 |
2015/12/08(火) 05:31:39.05ID:4pAacKsE
最短経路問題を解く為のダイキストラの方法で使われるヒープに関して、計算量の解析結果からバイナリヒープよりフィボナッチヒープの方が速いと言う内容が論文等に記載されているが
実際にプログラムを作製するとバイナリヒープの方が速いとか
何故フィボナッチヒープのスピードが出ないのですか?等と言うQAをネット上で見かける。計算量解析は実行速度を表現出来ているのでしょうか?
0055デフォルトの名無しさん
垢版 |
2015/12/08(火) 23:35:39.36ID:VwS2Arsg
いわゆる「計算量」ってのは、だいたい演算の回数を指してる。
でも今時のコンピュータだと、ボトルネックになるのはだいたいメモリアクセスとかの通信で、演算じゃない。
だから実行速度を正確に反映するような指標じゃないんだよね。

他にメモリアクセスの回数とかを使う指標があって、そっちのほうが実際の速度に近くなる。
その路線で cache-oblivious とか cache-aware なアルゴリズムが作られた。
0056デフォルトの名無しさん
垢版 |
2015/12/09(水) 10:00:28.48ID:3EPxHLPC
ok
0058デフォルトの名無しさん
垢版 |
2015/12/15(火) 16:41:44.14ID:hXE077iv
べき集合を生成するアルゴリズムの計算オーダーは指数O(2^n)とされていますが,
このアルゴリズムの計算量が指数なのは
@「生成する対象が指数個存在するため」
A「アルゴリズムの構造のため(つまり,アルゴリズムによってオーダーは変化する)」
この@、Aの理由のどちらによるものなのですか?
よろしくお願いします.
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況