データ構造,アルゴリズム,デザインパターン総合スレ 3©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2016/06/19(日) 14:47:29.63ID:5KvSKdL/
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

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

                  京都大学霊長類研究所

データ構造,アルゴリズム,デザインパターン総合スレ 2
http://echo.2ch.net/test/read.cgi/tech/1362301811/

【関連スレ】
3Dアルゴリズム全般
http://toro.2ch.net/test/read.cgi/tech/1164171086/
<集大成>アルゴリズム大辞典
http://toro.2ch.net/test/read.cgi/tech/1086272325/
アルゴリズム総合スレ in ム板
http://toro.2ch.net/test/read.cgi/tech/1217773415/

アルゴリズムとデータ構造 - Kaneko Lab.
ttp://www.kkaneko.com/adp/algo/index.html
アルゴリズムとデータ構造 - ソースコード探険隊
ttp://www.codereading.com/algo_and_ds/
各種アルゴリズムの C++ による実装 - Spaghetti Source
ttp://www.prefield.com/algorithm/
アルゴリズムとデータ構造 - プログラミングスレまとめ in VIP
ttp://vipprog.net/wiki/algo_and_data_const.html
228デフォルトの名無しさん
垢版 |
2017/01/02(月) 12:24:22.04ID:03PPbeGI
もっといい評価はありますでしょうか?
2017/01/02(月) 12:28:36.72ID:GdcUHK9D
判ってるなら効くな
230デフォルトの名無しさん
垢版 |
2017/01/02(月) 14:08:15.59ID:03PPbeGI
ダイクストラ法の正しさの証明で分かりやすい証明を思いつきました。

発表しましょうか?
2017/01/02(月) 14:21:37.12ID:w6ZCrhsc
どうぞどうぞ
2017/01/02(月) 14:27:23.53ID:yIXUnWg3
>>227
オーダーについてあんま良くわかってないんだろうけどO((n-1)!) なんて書き方はないよ
もし書いたとして、それはO(n!)と同じもの
2017/01/02(月) 17:55:38.72ID:J77W/v0L
>>222
実無限はいろいろ破綻するから可能無限にしておいたほうがいいよ
実数の定義に∞, -∞は入らない
というか,そもそも -∞ というのがおかしい存在

つリーマン球面
234デフォルトの名無しさん
垢版 |
2017/01/02(月) 19:04:30.86ID:03PPbeGI
なんか正しさの証明を書いてみると簡単なことなのに長くなりますね。
もし、間違っていたら指摘してください。

http://imgur.com/PDx2vmZ.jpg
http://imgur.com/DbMiSz5.jpg

ダイクストラのアルゴリズムは↑のものとします。
235デフォルトの名無しさん
垢版 |
2017/01/02(月) 19:05:18.10ID:03PPbeGI
節点 s から、ある節点 i への最短経路が存在するとき、その長さを td(i) で表わすことにする。
i への経路、したがって最短経路が存在しないときには、 td(i) = ∞ とする。

ステップ(1)で選ばれる節点 v ∈ V - S に対して、 d(v) = td(v) が成り立つことを数学的帰納法により、以下で証明する。

最初にステップ(1)が実行されるときを考える。
明らかに、 d(s) = td(s) = 0 が成り立つ。

k ≧ 1 とする。
第 1 回目から第 k 回目にステップ(1)が実行されるときに、いつもステップ(1)で選ばれる節点 v ∈ V - S に対して、
d(v) = td(v) が成り立つと仮定する。
236デフォルトの名無しさん
垢版 |
2017/01/02(月) 19:05:35.40ID:03PPbeGI
第 (k+1) 回目にステップ(1)が実行されるときを考える。
このとき、明らかに #S = k であり、 ∀i ∈ S に対して、 d(i) = td(i) が成り立つ。
第 (k+1) 回目にステップ(1)が実行されるときに選ばれる節点を v ∈ V - S とする。
d(v) = ∞ である場合と d(v) ≠ ∞ である場合で場合分けして考える。

(1) d(v) = ∞ である場合。
td(v) ≠ d(v) = ∞ と仮定して矛盾を導く。
td(v) ≠ ∞ であるから、節点 s から節点 v への経路 s = v_0 → v_1 → … → v_(l-1) → v_l = v が存在する。
明らかに、 td(v_0), td(v_1), …, td(v_(l-1)), td(v_l) ≠ ∞ である。
v_0 ∈ S, v_l ∈ V - S であるから、 v_i ∈ S, v_(i+1) ∈ V - S となるような i が存在する。
∀j ∈ V - S に対して、 d(j) = ∞ であるから、 d(v_(i+1)) = ∞ である。また、 v_i ∈ S であるから、
d(v_i) = td(v_i) ≠ ∞ が成り立つ。
v_i がステップ(2)で S に追加されたときのことを考えれば分かるように、 (v_i, v_(i+1)) ∈ E かつ v_(i+1) ∈ V - S であるから、
d(v_(i+1)) = ∞ ということはない。これは矛盾である。
よって、 d(v) = td(v) = ∞ が成り立つ。
237デフォルトの名無しさん
垢版 |
2017/01/02(月) 19:05:51.66ID:03PPbeGI
(2) d(v) ≠ ∞ である場合。
td(v) ≠ d(v) と仮定して矛盾を導く。
ステップ(2)を考えれば明らかなように、 d(v) ≠ ∞ であるから、節点 s から節点 v への
最短経路 s = v_0 → v_1 → … → v_(l-1) → v_l = v が存在する。
よって、 td(v) ≠ ∞ である。
仮定により、 td(v) ≠ d(v) であるから、 td(v) < d(v) が成り立つ。
v_0 ∈ S, v_l ∈ V - S であるから、 v_i ∈ S, v_(i+1) ∈ V - S となるような i が存在する。
td(v_(i+1)) < d(v_(i+1)) である。なぜなら、もし、そうでないと仮定すると、 d(v_(i+1)) = td(v_(i+1)) であるが、
td(v_(i+1)) ≦ td(v) < d(v) であるから、 d(v_(i+1)) < d(v) となってしまい、ステップ(1)での v の
選ばれ方に矛盾するからである。
v_i ∈ S であるから、 d(v_i) = td(v_i) である。
v_i がステップ(2)で S に追加されたときのことを考えれば分かるように、 (v_i, v_(i+1)) ∈ E かつ v_(i+1) ∈ V - S であるから、
d(v_i) + a_(v_i v_(i+1)) ≧ d(v_(i+1)) である。
一方、明らかに、 td(v_i) + a_(v_i v_(i+1)) = td(v_(i+1)) であるから、
td(v_(i+1)) = td(v_i) + a_(v_i v_(i+1)) = d(v_i) + a_(v_i v_(i+1)) ≧ d(v_(i+1)) となるが、これは矛盾である。
よって、 td(v) = d(v) が成り立つ。
238デフォルトの名無しさん
垢版 |
2017/01/02(月) 19:06:08.41ID:03PPbeGI
以上より、第 (k+1) 回目にステップ(1)が実行されるときにも、ステップ(1)で選ばれる節点 v ∈ V - S に対して、
d(v) = td(v) が成り立つ。

S に追加される節点はすべて、ステップ(1)で選ばれた 節点 v ∈ V - S であり、一度 S に追加された節点 v の d(v) はそれ以後、
変更されないから、ステップ(1)でアルゴリズムが終了したとき、 ∀i ∈ S = V に対して、 d(i) = td(i) が成り立つ。
239デフォルトの名無しさん
垢版 |
2017/01/02(月) 19:26:36.14ID:03PPbeGI
>>232

ある本では、

正定数 c, n0 が存在して、 n ≧ n0 のとき、 T(n) ≦ c*f(n) であるなら、
T(n) は O(f(n)) であるという

と定義されています。

T(n) = n!
f(n) = n!
g(n) = (n-1)!

とします。

このとき、明らかに、
T(n) は O(f(n)) ですが、
T(n) は O(g(n)) ではありません。
240デフォルトの名無しさん
垢版 |
2017/01/02(月) 19:29:54.44ID:03PPbeGI
したがって、

O(f(n)) と O(g(n)) は異なります。
2017/01/03(火) 08:33:06.09ID:3o9M4oho
この狂人ヤバいなw
242デフォルトの名無しさん
垢版 |
2017/01/03(火) 08:50:16.82ID:hCDXc7Qp
>>224
>>227

閉路を含まないから、各点を高々1回しか通らない。(端点も)

直通の経路が 1
途中でk個所を通過する経路が
 (n-2)(n-3)・・・・・(n-k-1) = (n-2)!/(n-k-2)!
だけある。ただし、k≦n-2
よって
a_n = (n-2)!{1 + 1/1! + 1/2! + … + 1/(n-2)!},

n ≧ 2 のとき、

(n-2)! ≦ (n-2)! * (1 + 1/1! + 1/2! + … + 1/(n-2)!) ≦ e * (n-2)!

したがって、

a_n = Θ((n-2)!)

である。
243デフォルトの名無しさん
垢版 |
2017/01/03(火) 08:52:54.04ID:hCDXc7Qp
>>234-238

のダイクストラのアルゴリズムの正しさの証明に間違いはないという
ことでOKですか?
244デフォルトの名無しさん
垢版 |
2017/01/03(火) 11:39:58.60ID:hCDXc7Qp
Erik DemaineはMITの歴史上最年少で教授になったという天才だそうですね。

今、そのErik Demaineの2005年のダイクストラのアルゴリズムについての講義を見ています。

見終わったら、講義の要約について書きます。
245デフォルトの名無しさん
垢版 |
2017/01/03(火) 13:47:58.01ID:hCDXc7Qp
ダイクストラのアルゴリズム:

01: d[s] ← 0
02: for each v ∈ V - {s}:
03: ■■d[v] ← ∞
04: S ← Φ
05: Q ← V
06: while Q ≠ Φ:
07: ■■u ← ExtractMin(Q)
08: S ← S ∪ {u}
09: for each v ∈ Adj[u]:
10: ■■if d[v] > d[u] + w(u, v):
11: ■■■■d[v] ← d[u] + w(u, v)
246デフォルトの名無しさん
垢版 |
2017/01/03(火) 13:49:29.21ID:hCDXc7Qp
Correctness I:

d[v] の初期化の直後、およびLine 11の直後において、
すべての v ∈ V に対して、 d[v] ≧ δ(s, v) が
成り立つ。

証明:
d[v] の初期化の直後には、
d[s] = 0 かつすべての v ∈ S - {v} に対して、d[v] = ∞
が成り立っている。
δ(s, s) = 0 かつすべての v ∈ S に対して、 δ(s, v) ≦ ∞
であるから、d[v] の初期化の直後には、
すべての v ∈ V に対して、 d[v] ≧ δ(s, v) が確かに
成り立っている。
247デフォルトの名無しさん
垢版 |
2017/01/03(火) 13:49:56.08ID:hCDXc7Qp
Line 11の直後において、すべての v ∈ V に対して、
d[v] ≧ δ(s, v) が成り立つことを背理法により示す。

Line 11の直後において、 d[v] ≧ δ(s, v) が
成り立たないような v ∈ V が存在するとする。
v をそのような点の中で、最初の点とする。

d[v] < δ(s, v)

d[v] < δ(s, v) ≦ ∞ であるから、
ダイクストラのアルゴリズムのLine 11は少なくとも1回は
実行されているはずである。そのような最後の実行を

d[v] ← d[u] + w(u, v)

とすると、

d[u] + w(u, v) = d[v] < δ(s, v)

が成り立つ。

一方、 d[u] ≧ δ(s, u) であるから、

d[u] + w(u, v) ≧ δ(s, u) + w(u, v)
≧ δ(s, u) + δ(u, v)
≧ δ(s, v)

が成り立つが、これは矛盾である。
248デフォルトの名無しさん
垢版 |
2017/01/03(火) 13:51:21.27ID:hCDXc7Qp
Correctness Lemma:
s → … → u → v を s から v への一つの最短路とする。
d[u] = δ(s, u) であるとする。

このとき、Line10-11を実行すると、

d[v] = δ(s, v)

が成り立つ。

証明:
δ(s, v) = w(s → … → u) + w(u, v)
= δ(s, u) + w(u, v)
Correctness Iより、 d[v] ≧ δ(s, v)

(1)Line10-11の実行前に、 d[v] = δ(s, v) である場合。
Line10-11の実行後も d[v] = δ(s, v) である。

(2)Line10-11の実行前に、 d[v] > δ(s, v) である場合。
d[v] > δ(s, v) = δ(s, u) + w(u, v) = d[u] + w(u, v)
Line10-11の実行後は、 d[v] = d[u] + w(u, v) = δ(s, v)
となる。
249デフォルトの名無しさん
垢版 |
2017/01/03(火) 13:52:06.64ID:hCDXc7Qp
Correctness II:
ダイクストラのアルゴリズムが終了したとき、
すべての v ∈ V に対して、 d[v] = δ(s, v) が成り立つ。

証明:
d[v] は v が S に追加された後は、不変である。
よって、 v が S に追加されたときに、
d[v] = δ(s, v) であることを示せばよい。

背理法で示す。
v が S に追加されたときに、 d[v] ≠ δ(s, v) であるような
v ∈ V が存在すると仮定する。
u をそのような点の中で、最初に S に追加された点とする:
d[u] ≠ δ(s, u)
Correctness Iより、
d[u] > δ(s, u)
250デフォルトの名無しさん
垢版 |
2017/01/03(火) 13:52:49.71ID:hCDXc7Qp
今、 u が S に追加される直前の状況を考えることにする。
u はまだ S に追加されていないから、 u ∈ Q である。
p を s から u への一つの最短路とすると、 w(p) = δ(s, u) である。
s ∈ S, u ∈ Q であるから、 p 上の辺 (x, y) で x ∈ S, y ∈ Q となる
ような辺が存在する。そのような辺の一つを (x, y) とする。
すると、 p は以下のようになる。
p : s → … → x → y → … → u
x ∈ S であるから、 u に関する仮定より、
d[x] = δ(s, x) が成り立つ。また、明らかに、
s → … → x → y は s から y への一つの最短路であるから、
Correctness Lemmaより、 d[y] = δ(s, y) が成り立つ。
明らかに、 δ(s, y) ≦ δ(s, u) であるから、
d[y] ≦ δ(s, y)
また、Line07を見れば分かるように、
d[u] ≦ d[y] である。
よって、

d[u] ≦ δ(s, u) となるが、これは矛盾である。
251デフォルトの名無しさん
垢版 |
2017/01/03(火) 13:55:46.21ID:hCDXc7Qp
Lec 17 | MIT 6.046J / 18.410J Introduction to Algorithms (SMA 5503), Fall 2005
https://youtu.be/xhG2DyCX3uA
252デフォルトの名無しさん
垢版 |
2017/01/05(木) 09:16:14.40ID:4i7P3+nF
アルゴリズムイントロダクションって自明なことをわざわざループ不変量を使ったりして、
証明していて、うざすぎますね。
253デフォルトの名無しさん
垢版 |
2017/01/05(木) 09:16:52.73ID:4i7P3+nF
通常の数学の本なら自明で済ませるようなことをわざわざ証明している。
2017/01/05(木) 09:57:50.61ID:OZq8Y/OW
このバカ、以前も全く同じこと言って暴れたな。
2017/01/05(木) 10:02:39.43ID:OZq8Y/OW
http://hissi.org/read.php/tech/20160422/cGVtVmVaYUg.html
http://hissi.org/read.php/tech/20160612/YkttemlBQ3Y.html
こいつだ。

> って当たり前のことをループ不変とかを使って説明しているよね。はっきりいってくどい。
> ループ不変式とかいうのが出てくるけど、当たり前のことを形式的に証明しているだけで、つまらなすぎる。
> 馬鹿の一つ覚えみたいにループ不変式をつかって証明しようとしている。

これぞ「馬鹿の一つ覚え」である。
2017/01/05(木) 10:44:28.31ID:W/+CAQrH
数学とコンピュータ科学の区別がつかない厨房だろう
257デフォルトの名無しさん
垢版 |
2017/01/05(木) 11:01:45.09ID:4i7P3+nF
クヌースの本なんかだと妙なくどさはない。

アルゴリズムイントロダクションはメリハリが全くない。
Trivialなこともそうでないことも平等に扱いすぎている。

要するに本を書くセンスがない。
258デフォルトの名無しさん
垢版 |
2017/01/05(木) 11:02:52.69ID:4i7P3+nF
セジウィックとウエインの本のほうがずっとよい。
259デフォルトの名無しさん
垢版 |
2017/01/05(木) 11:07:44.54ID:4i7P3+nF
日本語の本について言及しておく。
例えば、評判のよい茨木俊秀の本。

こんな薄いスカスカの本をよくも恥ずかしげもなく出版するものだとあきれる。
260デフォルトの名無しさん
垢版 |
2017/01/05(木) 11:19:31.17ID:4i7P3+nF
アルゴリズムイントロダクションの悪口を書いたがいいところもある。

例えば、第29章線形計画法。

線形計画法に対しては、Trivialなこともそうでないことも平等に扱うという方針が
向いているように思う。

ただ、アルゴリズムの本に線形計画法を入れる理由が分からない。

整数論的アルゴリズムの章はあまりにも簡単すぎる。
高木貞治の本でも読んだ方がよい。
261デフォルトの名無しさん
垢版 |
2017/01/05(木) 11:28:06.54ID:4i7P3+nF
結論として、ベストな本はクヌースが予定しているTAOCPの要約本ということになる。
2017/01/05(木) 11:29:47.36ID:W/+CAQrH
結論として4i7P3+nFはNG行き
2017/01/05(木) 11:33:33.85ID:2uA+A+xC
>>253
自明ほど危ういものは無いんだが
2017/01/05(木) 11:40:35.14ID:OZq8Y/OW
例によって ID:4i7P3+nF が発狂しててワロタ
265デフォルトの名無しさん
垢版 |
2017/01/05(木) 11:44:36.30ID:4i7P3+nF
>>263

では、なぜ、一般に、コンピュータ科学者よりも頭が良いとされる数学者が
自明で済ませることが多いのでしょうか?

もし危ういのなら頭のよい数学者は自明などと書かないはずです。
2017/01/05(木) 11:52:58.57ID:r7KPx/TL
そんな多くねえよちゃんと論文読め
2017/01/05(木) 12:06:11.36ID:2uA+A+xC
自明連発する方が馬鹿なのか
2017/01/05(木) 13:09:24.25ID:c6xYhHVb
>>265
馬鹿丸出し
2017/01/05(木) 13:18:34.40ID:c6xYhHVb
>一般に、コンピュータ科学者よりも頭が良いとされる数学者が
根拠は?
>自明で済ませることが多いのでしょうか?
数学のコンテキストの話

そもそも証明の意味もコンピュータ科学と数学では違うだろ
2017/01/05(木) 14:56:52.93ID:jagWiFjG
なんでバカって本質に関係ないところでギャーギャー騒ぐの?
2017/01/05(木) 14:58:54.44ID:YjTG1plI
うむ
272デフォルトの名無しさん
垢版 |
2017/01/05(木) 19:46:02.51ID:4i7P3+nF
アルゴリズムイントロダクションについて、数学が出来る人向けの本だという人がいる。
そして、数学ができない人はセジウィック&ウエインの本を読めという人がいる。

アルゴリズムイントロダクションが数学的な本だとは全く思わない。数学的な内容については
主に結果だけを書いている。

ただネチネチとアルゴリズムの正しさの証明が書かれているだけのこと。

クヌースの本のように、楽しい本ではない。
2017/01/05(木) 20:37:39.99ID:UiiKd7HR
>>272
>>270
2017/01/05(木) 22:15:16.24ID:WPj32BYO
書評したければ別のところでやれ
275デフォルトの名無しさん
垢版 |
2017/01/06(金) 17:19:30.91ID:TSHa+AxL
再帰の除去についてやり方が詳しく書いてある本を教えてください。
276デフォルトの名無しさん
垢版 |
2017/01/06(金) 17:43:03.36ID:TSHa+AxL
プログラミングコンテストチャレンジブック第2版のp.35
Lake Counting(POJ No.2386)

の解答として、以下のプログラムはあっていますか?

void dfs(i, j, n){
if(i < 0 || i >= N || j < 0 || j >= M){
return;
}
if(field[i][j] != 'W'){
return;
}
if(visit[i][j] == true){
return;
}
visit[i][j] = true;
dfs(i-1, j-1, n+1);
dfs(i-1, j, n+1);
dfs(i-1, j+1, n+1);
dfs(i, j-1, n+1);
dfs(i, j+1, n+1);
dfs(i+1, j-1, n+1);
dfs(i+1, j, n+1);
dfs(i+1, j+1, n+1);

if(n == 0){
count++;
}
return;
}
2017/01/06(金) 18:06:18.89ID:XtKi9eaG
>>275
えっと
かぅですか?
http://nothingcosmos.blog52.fc2.com/blog-entry-170.html
278デフォルトの名無しさん
垢版 |
2017/01/06(金) 18:36:23.48ID:TSHa+AxL
Wrong Answerになっちゃうんだけど。
279デフォルトの名無しさん
垢版 |
2017/01/06(金) 18:38:07.31ID:TSHa+AxL
例題については正しい答えが計算されるんだけど。
2017/01/06(金) 18:43:00.23ID:LxnclcVs
よかったね
281デフォルトの名無しさん
垢版 |
2017/01/06(金) 20:15:02.80ID:TSHa+AxL
>>277

ソースレベルで再帰を除去する方法が知りたいんですが。
282デフォルトの名無しさん
垢版 |
2017/01/06(金) 20:22:33.43ID:TSHa+AxL
秋葉らのプログラムでもWrong Answerになっていまします。

入出力の問題のようですね。
283デフォルトの名無しさん
垢版 |
2017/01/06(金) 20:27:59.50ID:TSHa+AxL
入出力の問題ってやっかいですね。
出力がどうなっているかとかPOJでは調べられないんですか?
284デフォルトの名無しさん
垢版 |
2017/01/06(金) 20:41:27.59ID:TSHa+AxL
なんなんだろう?

scanf,printfを使っていたらダメだったのが、cinとcoutにしたらOKになった。
285デフォルトの名無しさん
垢版 |
2017/01/08(日) 12:26:37.82ID:E98VLsZL
F(p, n, r) の計算量を教えてください。

n: 整数
p, r: 整数配列(インデックス0からn-1)

F(p, n, r):
■■if r[n] ≧ 0:
■■■■return r[n]
■■if n == 0:
■■■■q = 0
■■else:
■■■■q = -∞
■■■■for i = 1 to n:
■■■■■■q = max(q, p[i] + F(p, n-i, r))
■■r[n] = q
■■return q
2017/01/08(日) 12:31:27.73ID:0mVP2hZ6
O(n^2)
2017/01/08(日) 12:32:34.98ID:0mVP2hZ6
>>285
ここで解説されてる
http://echo.2ch.net/test/read.cgi/tech/1363854937/
288デフォルトの名無しさん
垢版 |
2017/01/08(日) 13:51:15.22ID:E98VLsZL
>>286-287

ありがとうございます。

でも解説されていませんね。
289デフォルトの名無しさん
垢版 |
2017/01/08(日) 13:57:19.77ID:E98VLsZL
どうやって計算量を見積もるんですか?

何を単位にするんですか?
290デフォルトの名無しさん
垢版 |
2017/01/08(日) 14:06:13.08ID:E98VLsZL
T(n)
=
c1 + c2 * n + T(n-1) + … + T(0)
=
c1 + c2 * n + T(n-1) + c3*(n-1)

と解けばいいんですかね?
291デフォルトの名無しさん
垢版 |
2017/01/08(日) 14:07:36.75ID:E98VLsZL
T(n) = c1 + c2*n + T(n-1)
T(0) = c3

この漸化式の解を求めればいいんですかね?
292デフォルトの名無しさん
垢版 |
2017/01/08(日) 14:12:15.21ID:E98VLsZL
T(n)
=
[T(n) - T(n-1)] + [T(n-2) - T(n-3)] + … + [T(1) - T(0)] + T(0)
=
[c1 + c2*n] + [c1 + c2*(n-1)] + … + [c1 + c2*1] + c3
=
c1*n + c2*(1/2)*n*(n+1) + c3
=
Θ(n^2)

おお、あってるっぽいですね。
293デフォルトの名無しさん
垢版 |
2017/01/08(日) 14:20:56.92ID:E98VLsZL
>>290-292
は我ながら明解な解答ですが、

教科書では、以下のように導出しています。
この導出がよく分からないのですが。

「以前に解かれている部分問題を解くための再帰は直ちに戻るので、Fは
各部分問題をただ1度だけ解く。この手続きはサイズが0,1,....,nの部分問題
を解く。サイズがnの部分問題を解くために、for文がn回繰り返される。したがって、
Fの再帰呼び出し全体における、このfor文の繰り返し回数は等差数列を形成し、
総繰り返し回数はΘ(n^2)となる。」
294デフォルトの名無しさん
垢版 |
2017/01/08(日) 14:26:56.39ID:E98VLsZL
あーあ、分かりました。

T(n)
=
c1 + c2 * n + T(n-1) + … + T(0)
=
c1 + c2 * n + T(n-1) + c3*(n-1)

このあたりのことを言っているんですね。
2017/01/08(日) 14:27:53.04ID:rSxBm0q1
馬鹿には無理
296デフォルトの名無しさん
垢版 |
2017/01/08(日) 14:28:32.97ID:E98VLsZL
>>289

for文の繰り返し回数=計算量ですね。
297デフォルトの名無しさん
垢版 |
2017/01/08(日) 14:29:42.72ID:E98VLsZL
結局自分ですべて解決してしまいました。
2017/01/08(日) 17:12:11.39ID:8OGZNgRf
よくやった
褒美として自分専用のスレを立てる権利をやろう
2017/01/08(日) 18:45:26.96ID:KkEYpXLY
命名ID:E98VLsZは俺様
300デフォルトの名無しさん
垢版 |
2017/01/08(日) 20:55:21.87ID:E98VLsZL
プログラミングコンテストチャレンジブック

p.45 Best Cow Lineっていう問題の解答のプログラムって無駄がありますよね。

この本を難しいという人がいますが、そんなに難しいですかね?
301デフォルトの名無しさん
垢版 |
2017/01/08(日) 22:46:42.12ID:E98VLsZL
プログラミングコンテストチャレンジブック
プログラミングコンテスト攻略のためのアルゴリズムとデータ構造
最強最速アルゴリズマー養成講座

この3冊に共通していることですが、日本語が下手ですよね。

一番ひどいのが

最強最速アルゴリズマー養成講座

ですね。
302デフォルトの名無しさん
垢版 |
2017/01/08(日) 22:50:51.06ID:E98VLsZL
一番面白いのは、

プログラミングコンテストチャレンジブック

だと思いますけど、例えば、貪欲法でなぜうまくいくのかの証明が書いてないですね。
2017/01/08(日) 22:51:13.67ID:Qw43e7Zm
ここはプログラミング問題集書評のスレなの?
304デフォルトの名無しさん
垢版 |
2017/01/09(月) 06:08:00.57ID:JOAqSyBk
>>301
うむ
日本語下手なのはもちろん英語も下手みたいだな
2017/01/09(月) 06:09:36.68ID:cSodeH17
頭の使い方が下手というかそもそも頭が不自由なんだろう
306デフォルトの名無しさん
垢版 |
2017/01/09(月) 10:59:50.63ID:TqLncjlX
アルゴリズムイントロダクションの練習問題15.1-3の解答って以下であっていますか?

BOTTOM-UP-CUT-ROD(p, c, n)
1 r[0..n] を新しい配列とする
2 r[0] = 0
3 for j = 1 to n
4 ■■q = -∞
5 ■■for i = 1 to j-1
6 ■■■■q = maxx(q, p[i] + r[j-i] - c)
7 ■■q = max(q, p[j])
8 ■■r[j] = q
9 return r[n]
307デフォルトの名無しさん
垢版 |
2017/01/09(月) 11:02:45.57ID:TqLncjlX
15.1-2

反例

p[1] = 1
p[2] = 5
p[3] = 7
308デフォルトの名無しさん
垢版 |
2017/01/09(月) 13:21:16.77ID:TqLncjlX
F_0 = 0
F_1 = 1
F_i = F_(i-1) + F_(i-2) (i≧2)

F_n を O(n) 時間で計算する動的計画アルゴリズムを設計せよ。
対応する部分問題グラフを描け。
このグラフにはいくつの頂点と辺が存在するか?


↑はアルゴリズムイントロダクションの練習問題15.1-5なんですけど、
なんか簡単すぎるようにみえるんですけど、落とし穴があるんですかね?

なんでΘ(n)じゃなくてO(n)と書いてあるんですかね?
309デフォルトの名無しさん
垢版 |
2017/01/09(月) 13:34:48.26ID:TqLncjlX
配列を使わないとDPとは言えないですか?
配列いらないですよね。
でもi = 0〜nに対して、F[i]が求まるという意味はありますね。


F[0] = 0
F[1] = 1
for i = 2 to n
■■F[n] = F[n-1] + F[n-2]

明らかにΘ(n)ですよね。

部分問題グラフは以下ですよね:

http://imgur.com/WUQMG8R.jpg

#V = n + 1
#E = 2*(n - 1)

ですね。
310デフォルトの名無しさん
垢版 |
2017/01/09(月) 13:37:23.94ID:TqLncjlX
あ、ひっかけがありましたね。
訂正します:

n > 0 のとき、

#V = n + 1
#E = 2*(n - 1)

n = 0 のとき

#V = n + 1
#E = 0

ですね。
311デフォルトの名無しさん
垢版 |
2017/01/09(月) 15:27:31.58ID:TqLncjlX
アルゴリズムイントロダクションに、以下の事実を1955年にRobbinsが発見したと書いてあります。

--------------------------------------------
すべての n ≧ 1 に対して

n! = sqrt(2*π*n) * (n/e)^n * exp(α_n)

と書ける。

ただし、 1/(12*n+1) < α_n < 1/(12*n)
--------------------------------------------

本当にこんな比較的簡単にみえる結果が1955年という比較的最近になって発見された
のでしょうか?
312デフォルトの名無しさん
垢版 |
2017/01/09(月) 15:37:47.20ID:4OeNzyzM
>>308
フィボナッチだろ
√5が出て来る公式
O(1)になるかも試練が
2017/01/09(月) 15:46:27.18ID:FSSb8O2Z
>>311
      r ‐、
      | ○ |         r‐‐、
     _,;ト - イ、      ∧l☆│∧  良い子の諸君!
    (⌒`    ⌒ヽ   /,、,,ト.-イ/,、 l  
    |ヽ   ~~⌒γ ⌒ ) r'⌒ `!´ `⌒) よく頭のおかしい数学者気取りのバカが
   │ ヽー―'^ー-'  ( ⌒γ ⌒~~ / 「誰も気付かなかった事を発見したことを発表」とほざくが
   │  〉    |│  |`ー^ー― r' | 大抵それは「先人が思いついたけどあえて発表しなかった」ことだ
   │ /───| |  |/ |  l  ト、 |  王道が何故面白いか理解できない人間に面白い話は
   |  irー-、 ー ,} |    /     i 作れないぞ!
   | /   `X´ ヽ    /   入  |
314デフォルトの名無しさん
垢版 |
2017/01/10(火) 20:16:10.65ID:Zd0v4023
アルゴリズムイントロダクションが難しいという人がいますけど、
この本は馬鹿丁寧に書かれていますよね。

いわゆる「書きすぎ」ですね。

「書きすぎ」れば分かりやすくなると思い込んでいますね、著者らは。
2017/01/10(火) 20:19:42.26ID:kxFYGz06
http://hissi.org/read.php/tech/20160614/U2lCYS9zNTM.html

マジ基地だな。壊れたレコードかよ。
2017/01/13(金) 21:58:42.65ID:wiy2qrIv
プログラミング言語のパーサーってどういう仕組みで動いてるんですか?
文字列をトークンの配列に分ける
特定のパターンにマッチするトークンの部分集合をひとまとめにして新しいトークンに置き換える
再帰的に同じ事を繰り返す
こんな感じ?
2017/01/13(金) 22:37:46.17ID:+ExxsU2F
>>316
Java 再帰下降構文解析超入門
http://qiita.com/7shi/items/64261a67081d49f941e3

ビジュアル構文解析
http://www.csg.ci.i.u-tokyo.ac.jp/~ichikawa/visual_parsing.pdf
2017/01/14(土) 00:10:28.40ID:H4kTcvBH
>>317
これ考えた奴は天才だな
2017/01/16(月) 17:57:37.27ID:YH2Bx58z
Lisperか
BNF
2017/01/19(木) 09:40:05.52ID:uhfgjGGl
https://chrome.google.com/webstore/detail/%E3%81%AF%E3%81%A6%E3%81%AAng/mbgdnfmdelffjdhkdggilmphfdihnmcj?hl=ja
2017/05/14(日) 13:16:07.97ID:SQILU9sh
類似スレ検索とかのアルゴリズムって何がいいのかな?
編集距離とか数字部分のマスキングくらいしか浮かばない
形態素解析して要素の一致率とかもあるみたいだけど、スレタイみたいな短い文字じゃ弱そう
2017/05/14(日) 13:20:48.12ID:SQILU9sh
むしろ短くて重要な単語が多いスレタイこそ一致率うまく働きそうか
毎回評価してたら検索速度悪そうだけど
2017/05/14(日) 13:56:17.84ID:CjOSHdvj
Baka ha sinanakya
Naoranai
Fucky ou
324デフォルトの名無しさん
垢版 |
2017/05/26(金) 14:08:00.89ID:fOPo0M5r
アルゴリズムイントロダクション

当たり前のことを定理などとよんで回りくどく証明していますね。

なんなんですか?この本。

例えば、p.506定理22.9とか。
325デフォルトの名無しさん
垢版 |
2017/05/26(金) 19:39:06.33ID:GnitEmTF
当たり前のことを2chで指摘して回りくどくdisっていますね。
なんなんですか?あなた。
例えば、 >>324 とか。
2017/05/26(金) 21:10:54.45ID:ovKX6RUR
>>324
当たり前が何故当たり前なのかを知るのは割と重要だが。
327デフォルトの名無しさん
垢版 |
2017/05/26(金) 22:50:21.07ID:fOPo0M5r
>>324

しかも「証明」が長い。当たり前のことを長々と書いている。
その「証明」自体も意外性ゼロ。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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