【前スレ】
データ構造,アルゴリズム,デザインパターン総合スレ 3
https://mevius.5ch.net/test/read.cgi/tech/1466315249/
【関連スレ】
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
探検
データ構造,アルゴリズム,デザインパターン総合スレ 4
2020/01/27(月) 22:28:35.79ID:yq8WVV9K
2デフォルトの名無しさん
2020/07/27(月) 12:25:50.05ID:n24uY58k 深さ優先探索の計算時間がO(|V| + |E|)と評価されるのはなぜですか?
|V| << |E|だから、O(|E|)でOKな気がします。
|V| << |E|だから、O(|E|)でOKな気がします。
2020/07/27(月) 12:40:31.34ID:NergLkg0
わからんけどグラフの連結性を仮定してないのでは
2020/07/27(月) 15:17:43.62ID:BQ7JhCRr
>>2
|E| < |V|^2 だぞ
|E| < |V|^2 だぞ
2020/09/22(火) 22:37:15.01ID:Ok4HXOVw
2つの同数の点集合A,Bがあって
1対1対応させたときに対応させた点の距離の和が最小になるような1対1対応を探す効率の良いアルゴリズムってありますか
具体的にはa_i∈A, b_j∈B
i->j : j(i)
Σ_i( distance(a_i,b_j(i)) )←これが最小になるj(i)
1対1対応させたときに対応させた点の距離の和が最小になるような1対1対応を探す効率の良いアルゴリズムってありますか
具体的にはa_i∈A, b_j∈B
i->j : j(i)
Σ_i( distance(a_i,b_j(i)) )←これが最小になるj(i)
2020/09/22(火) 23:17:08.08ID:txyi13VO
二部グラフの最小重み完全マッチングでいけないかな
2020/09/22(火) 23:22:00.48ID:txyi13VO
でいけないかなというか,二部グラフの最小重み完全マッチングと同じかな
それならハンガリアン法とか最小費用流で解けるのでは
それならハンガリアン法とか最小費用流で解けるのでは
2020/09/22(火) 23:31:12.82ID:Ok4HXOVw
ありがとうございます
調べてみます
調べてみます
9デフォルトの名無しさん
2020/11/08(日) 15:47:31.10ID:hnEKBOnE 開票所要時間は理論上 O(log n) だよね?
【米大統領選】日本なら一晩で終わる開票作業 なぜそんなに時間がかかったのか(デイリー新潮)
https://news.yahoo.co.jp/articles/e7f705c442fa18c1455c579a7cd209861ef6212b
【米大統領選】日本なら一晩で終わる開票作業 なぜそんなに時間がかかったのか(デイリー新潮)
https://news.yahoo.co.jp/articles/e7f705c442fa18c1455c579a7cd209861ef6212b
2020/11/08(日) 15:50:45.10ID:YOqFgelx
アルゴリズムで書いたら判定してやるよ
11デフォルトの名無しさん
2020/11/08(日) 16:03:50.98ID:hnEKBOnE 自明なので判定するまでもないが。
12デフォルトの名無しさん
2020/11/08(日) 16:28:09.83ID:BBDku6LQ データ構造とアルゴリズムって人気ないの?
13デフォルトの名無しさん
2020/11/29(日) 20:21:41.24ID:rAnHdnpn これの 9.3. Solution が何故これで正解が導き出せるのか理解できないんですが
もう少しどなたか詳細に解決して頂けないでしょうか。
https://codility.com/media/train/7-MaxSlice.pdf
もう少しどなたか詳細に解決して頂けないでしょうか。
https://codility.com/media/train/7-MaxSlice.pdf
2020/11/29(日) 21:27:01.68ID:exnO589A
dpテーブル作って考えたほうがわかりやすいと思います
https://www.nii.ac.jp/userdata/shimin/documents/H22/100805_3rdlec.pdf
これの19ページとか
https://www.nii.ac.jp/userdata/shimin/documents/H22/100805_3rdlec.pdf
これの19ページとか
15デフォルトの名無しさん
2020/11/29(日) 21:37:18.71ID:M8xgBTYt そのPDFファイルに書いてあることの繰り返しになりますが,以下が成り立つからです.
max_ending == インデックスがiで終わるすべてのsliceの和と空のsliceの和(= 0)のうち最大の和
であると仮定する.
max_ending = max(0, max_ending+a)
を実行した後,
max_ending == インデックスがi+1で終わるすべてのsliceの和と空のsliceの和(= 0)のうち最大の和
が成り立つ.
max_ending == インデックスがiで終わるすべてのsliceの和と空のsliceの和(= 0)のうち最大の和
であると仮定する.
max_ending = max(0, max_ending+a)
を実行した後,
max_ending == インデックスがi+1で終わるすべてのsliceの和と空のsliceの和(= 0)のうち最大の和
が成り立つ.
16デフォルトの名無しさん
2020/11/29(日) 22:05:05.40ID:M8xgBTYt 5, -7, 3, 5, -2, 4, -1
インデックスが5で終わるsliceまたは空のsliceのうち,その和が最大であるsliceは,3, 5, -2, 4です.
インデックスが6で終わるsliceまたは空のsliceのうち,その和が最大であるsliceをSとする.
Sは何になるか?
3 + 5 - 2 + 4 - 1 = 9 > 0なので,Sは空のsliceではありません.
Sは,例えば,5, -2, 4, -1ではありません.もし,Sが,5, -2, 4, -1であるとすると,
5 - 2 + 4 - 1 > 3 + 5 - 2 + 4 - 1
したがって,
5 - 2 + 4 > 3 + 5 - 2 + 4
となってしまい,インデックスが5で終わるsliceまたは空のsliceのうち,その和が最大であるsliceが,3, 5, -2, 4ではなく,
5, -2, 4であるということになってしまうからです.
Sは,例えば,-7, 3, 5, -2, 4, -1ではありません.もし,Sが,-7, 3, 5, -2, 4, -1であるとすると,
-7 + 3 + 5 - 2 + 4 - 1 > 3 + 5 - 2 + 4 - 1
したがって,
-7 + 3 + 5 - 2 + 4 > 3 + 5 - 2 + 4
となってしまい,インデックスが5で終わるsliceまたは空のsliceのうち,その和が最大であるsliceが,3, 5, -2, 4ではなく,
-7, 3, 5, -2, 4, -1であるということになってしまうからです.
インデックスが5で終わるsliceまたは空のsliceのうち,その和が最大であるsliceは,3, 5, -2, 4です.
インデックスが6で終わるsliceまたは空のsliceのうち,その和が最大であるsliceをSとする.
Sは何になるか?
3 + 5 - 2 + 4 - 1 = 9 > 0なので,Sは空のsliceではありません.
Sは,例えば,5, -2, 4, -1ではありません.もし,Sが,5, -2, 4, -1であるとすると,
5 - 2 + 4 - 1 > 3 + 5 - 2 + 4 - 1
したがって,
5 - 2 + 4 > 3 + 5 - 2 + 4
となってしまい,インデックスが5で終わるsliceまたは空のsliceのうち,その和が最大であるsliceが,3, 5, -2, 4ではなく,
5, -2, 4であるということになってしまうからです.
Sは,例えば,-7, 3, 5, -2, 4, -1ではありません.もし,Sが,-7, 3, 5, -2, 4, -1であるとすると,
-7 + 3 + 5 - 2 + 4 - 1 > 3 + 5 - 2 + 4 - 1
したがって,
-7 + 3 + 5 - 2 + 4 > 3 + 5 - 2 + 4
となってしまい,インデックスが5で終わるsliceまたは空のsliceのうち,その和が最大であるsliceが,3, 5, -2, 4ではなく,
-7, 3, 5, -2, 4, -1であるということになってしまうからです.
2020/11/29(日) 23:01:49.05ID:0fgKV2B3
2020/11/29(日) 23:10:03.18ID:M8xgBTYt
そうですね.
足していってマイナスにならなければ,無いよりはましだから,捨てずにsliceに含め続けるということですね.
足していってマイナスにならなければ,無いよりはましだから,捨てずにsliceに含め続けるということですね.
19(u_・y)
2020/11/30(月) 17:46:41.21ID:nGWGFXsH そうですよ。マイナスでさえなければ、いないよりはマシだから、あなたも雇われ続けているんです。
さらに2 + 2は必ずしも4ではなく、2 +2 = 80にもなるんです。
さらに2 + 2は必ずしも4ではなく、2 +2 = 80にもなるんです。
2020/12/03(木) 18:30:54.40ID:Fq1nYucp
>>14
分離定理初めて知った、しゅごい
まあ算術でとかループでとか、ジャンプと変数があればとか、λさえあれば…とか似たような定理は見掛けたけど、は低レベル過ぎて指針にならんからな
これらでできないかひとしきり考えてみることにする
(もちろんちゃんと使える演算子は使います)
分離定理初めて知った、しゅごい
まあ算術でとかループでとか、ジャンプと変数があればとか、λさえあれば…とか似たような定理は見掛けたけど、は低レベル過ぎて指針にならんからな
これらでできないかひとしきり考えてみることにする
(もちろんちゃんと使える演算子は使います)
2020/12/22(火) 15:07:11.40ID:h5DFCbD/
近似アルゴリズムの本に
極大マッチングは,単に辺を一つずつ選んでいきながら,選んだ辺の両端点とそれらに接続するすべての辺を除いて辺がなくなるまで繰り返すことで得られる
とあり,nを頂点の数,mを辺の数としたとき,計算時間がO(n + m)と書いてあるのですが
nはどこから来たのでしょうか
両方に点が残っている辺を見ていけばいいのでO(m)でできると思うのですが
極大マッチングは,単に辺を一つずつ選んでいきながら,選んだ辺の両端点とそれらに接続するすべての辺を除いて辺がなくなるまで繰り返すことで得られる
とあり,nを頂点の数,mを辺の数としたとき,計算時間がO(n + m)と書いてあるのですが
nはどこから来たのでしょうか
両方に点が残っている辺を見ていけばいいのでO(m)でできると思うのですが
2020/12/31(木) 21:02:35.54ID:pjMyqahK
ArrayListって実装的にはただの可変長配列ですか?
2021/01/01(金) 06:52:59.87ID:L8CQYPdE
>>16
これは、最大連続区間か?
これは、最大連続区間か?
2021/02/27(土) 15:27:53.95ID:cGuo4IiQ
ウィキペディアの焼きなまし法
https://ja.wikipedia.org/wiki/%E7%84%BC%E3%81%8D%E3%81%AA%E3%81%BE%E3%81%97%E6%B3%95
にある擬似コードの
if nextE < bestE then
の部分はもしかして間違ってたりします?
この評価だとnextEが悪化するたびbestが更新されるように見えますが
https://ja.wikipedia.org/wiki/%E7%84%BC%E3%81%8D%E3%81%AA%E3%81%BE%E3%81%97%E6%B3%95
にある擬似コードの
if nextE < bestE then
の部分はもしかして間違ってたりします?
この評価だとnextEが悪化するたびbestが更新されるように見えますが
2021/02/27(土) 16:54:14.85ID:Hg2wHc/X
小さい方が良いでしょ
2021/02/27(土) 16:54:38.59ID:q6FQGtjh
値が小さい方が望ましい
2021/02/27(土) 17:10:02.18ID:cGuo4IiQ
よく読んでなかったすまんかった
2021/03/08(月) 16:54:28.07ID:H4OoIpXQ
焼きなましに例えるんだからEnergyのEだろうね
線形計画法が流行ってた時代はとりあえず目標関数は最大化するものとしてた風潮があった(LPでは双対問題と厳密に等価)
シュミレーション分野、最近の機械学習の流行りでとりあえずコスト関数を最小化する雰囲気
LPじゃないんで同じ点で極値を与える関数にも良し悪しがある点には気を付けねば
実数関数なら符号の反転と、並進に依らないアルゴリズムであれば並進を加えたもののみ等価
線形計画法が流行ってた時代はとりあえず目標関数は最大化するものとしてた風潮があった(LPでは双対問題と厳密に等価)
シュミレーション分野、最近の機械学習の流行りでとりあえずコスト関数を最小化する雰囲気
LPじゃないんで同じ点で極値を与える関数にも良し悪しがある点には気を付けねば
実数関数なら符号の反転と、並進に依らないアルゴリズムであれば並進を加えたもののみ等価
2021/03/17(水) 19:38:57.60ID:DuV9YnX6
初歩的な質問かもしれず、恐縮ですがお願いいたします。
i Phoneを使って、端末が始点から終点まで移動した角度をx,y,z(オイラー角)で取得したいと考えています。
最初は、始点と終点の端末の位置をオイラー角で取得し、その差分を出してみたのですが、ジンバルロックによりpitchの値を正確に取得できませんでした。
ジンバルロックを回避するためクォータニオンを使うといいようなのですが、クォータニオンを使って目的の値を算出する方法が分からない状態です。
もし分かる方がおられましたら、ご助言いただると幸いです。
よろしくお願いします。
i Phoneを使って、端末が始点から終点まで移動した角度をx,y,z(オイラー角)で取得したいと考えています。
最初は、始点と終点の端末の位置をオイラー角で取得し、その差分を出してみたのですが、ジンバルロックによりpitchの値を正確に取得できませんでした。
ジンバルロックを回避するためクォータニオンを使うといいようなのですが、クォータニオンを使って目的の値を算出する方法が分からない状態です。
もし分かる方がおられましたら、ご助言いただると幸いです。
よろしくお願いします。
2021/05/19(水) 16:18:22.70ID:7NWiu4qI
Minimum Mean Cycleでこのスライドを見ているのですが
3ページでmaxをとっているのに正しい答えがでる理由ってなんでですか?
http://www.columbia.edu/~cs2035/courses/ieor6614.S16/mmc.pdf
(d^n(v) - d^k(v)) / (n - k)はvからスタートしたときのMean Cycleですよね
d^k(v)が無限の場合を避けるためにmaxをとっていると思うのですが,なぜ正しい答えになるのでしょうか
3ページでmaxをとっているのに正しい答えがでる理由ってなんでですか?
http://www.columbia.edu/~cs2035/courses/ieor6614.S16/mmc.pdf
(d^n(v) - d^k(v)) / (n - k)はvからスタートしたときのMean Cycleですよね
d^k(v)が無限の場合を避けるためにmaxをとっていると思うのですが,なぜ正しい答えになるのでしょうか
2021/05/22(土) 02:18:16.19ID:/00w7bM8
>>29
取り敢えず理解はほっといて動けばいいのなら、ウィキペにでも公式載ってたと思うよ
取り敢えず理解はほっといて動けばいいのなら、ウィキペにでも公式載ってたと思うよ
32デフォルトの名無しさん
2021/10/03(日) 17:59:42.80ID:nkudyinT 幅優先探索の計算量がO(N)ではなくO(N + E)なのはなぜ?
Nは頂点の数、Eは辺の数です。
Nは頂点の数、Eは辺の数です。
2021/10/03(日) 20:36:41.51ID:KyHKDHW1
辺の数だけ処理が増えるから
頂点の数を同じにして辺の数が異なる2つのグラフを比較してみればわかる
頂点の数を同じにして辺の数が異なる2つのグラフを比較してみればわかる
2021/10/03(日) 22:55:23.59ID:45cLxSS6
モートン順序によって当たり判定を一瞬で計算するというのがありました
あれ特定の境目の上にオブジェクトがあるとすべてのオブジェクトとの衝突判定が発生するんですが
世の中のゲームってそんなふうにやってるんですか
あれ特定の境目の上にオブジェクトがあるとすべてのオブジェクトとの衝突判定が発生するんですが
世の中のゲームってそんなふうにやってるんですか
35デフォルトの名無しさん
2021/10/04(月) 18:40:34.82ID:N2yAdGNd 計算量がO(V + E)であるの定義は何ですか?
2021/10/04(月) 22:35:12.16ID:qkBPKVDO
それは計算量の定義をきいているのか?
2021/10/05(火) 00:11:45.95ID:wQtjKuKa
そのアルゴリズムの計算時間を f(n) とし、オーダーが O(g(n)) と表記される場合、定数cがあって、n がある程度大きくなれば常に f(n) <= c * g(n) が成り立つ。言い方を変えれば計算時間は最悪のケースでも c * g(n) を超えない
g(n) が N (Nの1次式) なら計算時間は c * N を超えないし
g(n) が N^2 (2次式) なら c * N^2 を超えない
c はマシンのスペックや環境で変わるので具体的な数値は追求しない
Nの入力サイズが10倍、100倍、...、1万倍となったときに計算時間がおおよそどのくらいのスピードで増えるか見積もれれば良い
O(N) なら10倍、100倍、...、1万倍
O(N^2) なら100倍、1万倍、...、1億倍..
詳しくはアルゴリズムの教科書か
https://ja.wikipedia.org/wiki/ランダウの記号
g(n) が N (Nの1次式) なら計算時間は c * N を超えないし
g(n) が N^2 (2次式) なら c * N^2 を超えない
c はマシンのスペックや環境で変わるので具体的な数値は追求しない
Nの入力サイズが10倍、100倍、...、1万倍となったときに計算時間がおおよそどのくらいのスピードで増えるか見積もれれば良い
O(N) なら10倍、100倍、...、1万倍
O(N^2) なら100倍、1万倍、...、1億倍..
詳しくはアルゴリズムの教科書か
https://ja.wikipedia.org/wiki/ランダウの記号
38デフォルトの名無しさん
2021/10/05(火) 02:13:06.84ID:3IOuHtiP2021/10/05(火) 03:31:33.71ID:wQtjKuKa
>>38
定義は同じ
V個の頂点はそれぞれ1回キューに入れられて1回キューから取り出される
E本の辺はある頂点から隣接する次の頂点を見つけるのに1度処理されるだけ
合わせてc0 * E + c1 * V の手間がかかるが、c0, c1 の大きい方を c として c0 * E + c1 * V <= c (E+V)、これは最悪でも計算量は c (E+V) を超えないことを意味し、E+V の部分が g(E+V) となる
定義は同じ
V個の頂点はそれぞれ1回キューに入れられて1回キューから取り出される
E本の辺はある頂点から隣接する次の頂点を見つけるのに1度処理されるだけ
合わせてc0 * E + c1 * V の手間がかかるが、c0, c1 の大きい方を c として c0 * E + c1 * V <= c (E+V)、これは最悪でも計算量は c (E+V) を超えないことを意味し、E+V の部分が g(E+V) となる
2021/10/05(火) 08:50:55.08ID:3IOuHtiP
>>39
なるほど。ありがとうございました。
なるほど。ありがとうございました。
41デフォルトの名無しさん
2021/10/10(日) 18:05:52.24ID:6QW0WSDe 以下のプログラミングコンテストの問題なのですが、『アルゴリズム実技検定』という本の解説では、これは動的計画法の問題であると書いてあります。
本当にこういうのも動的計画法と言いますか?
https://atcoder.jp/contests/abc026/tasks/abc026_c
本当にこういうのも動的計画法と言いますか?
https://atcoder.jp/contests/abc026/tasks/abc026_c
2021/10/10(日) 19:42:09.58ID:CKYp8hS8
>>41
ツリーを作って再帰にもできそうだけど、番号の1番大きい社員から少ない社員に向かって1つずつ処理していけば動的計画法になるね
最初に各社員に部下の給料のリスト(最初は空)を持たせて、社員番号Nから2番に向かって部下の給料のリストに値があればそこから自分の給与を計算して上司のリストに加えることを繰り返す
社員N番を含めて部下がいない、自分の番が回ってきても部下の給料リストが空なら1を上司のリストに加えればいい
ツリーを作って再帰にもできそうだけど、番号の1番大きい社員から少ない社員に向かって1つずつ処理していけば動的計画法になるね
最初に各社員に部下の給料のリスト(最初は空)を持たせて、社員番号Nから2番に向かって部下の給料のリストに値があればそこから自分の給与を計算して上司のリストに加えることを繰り返す
社員N番を含めて部下がいない、自分の番が回ってきても部下の給料リストが空なら1を上司のリストに加えればいい
2021/10/10(日) 20:02:45.11ID:CKYp8hS8
部下の給与リストじゃなくて最大値と最小値だけ覚えとけばもっと賢いか
2021/10/10(日) 20:08:58.53ID:6QW0WSDe
>>42-43
ありがとうございました。
『アルゴリズム実技検定』では、上司部下の関係を親子の関係と考えたツリーを考えて、再帰を使った深さ優先探索のような処理をしています。
そして、そのプログラムを動的計画法を使ったプログラムと書いています。
ありがとうございました。
『アルゴリズム実技検定』では、上司部下の関係を親子の関係と考えたツリーを考えて、再帰を使った深さ優先探索のような処理をしています。
そして、そのプログラムを動的計画法を使ったプログラムと書いています。
2021/10/10(日) 22:19:32.54ID:shNjC7Q8
英語版Wikipedia(その出展として挙げられている『アルゴリズムイントロダクション』)の説明に従うと、この例は部分問題重複性が無いので、動的計画法ではなく分割統治アルゴリズムと呼ぶべきでしょうね
https://en.m.wikipedia.org/wiki/Dynamic_programming
競技プログラミング界隈だとこのような例も動的計画法と呼ぶ人はいますが、書籍でそれが一般的であるかのように書かれているのはあまりよくないように思えますね
https://en.m.wikipedia.org/wiki/Dynamic_programming
競技プログラミング界隈だとこのような例も動的計画法と呼ぶ人はいますが、書籍でそれが一般的であるかのように書かれているのはあまりよくないように思えますね
2021/10/10(日) 22:22:05.61ID:6QW0WSDe
>>45
ありがとうございました。
ありがとうございました。
47デフォルトの名無しさん
2021/10/11(月) 16:16:04.73ID:bJ9NE0N3 閉路を含まない有向グラフのすべての有向パスのうち長さが最長の有向パスの長さを計算せよという問題について質問があります。
AtCoderの出題ページは以下になります。
https://atcoder.jp/contests/dp/tasks/dp_g
『アルゴリズム実技検定』という本の解説を読みますと「トポロジカルソート」という考え方を使うと書いてあります。
私は「トポロジカルソート」について何も知りませんが、制限時間内に答えを出すPythonプログラムを書けました。
本当に「トポロジカルソート」というのが必要でしょうか?
なお、上記ページにリンクが貼ってある解説のページ(hamayanhamayanというユーザーの解説のページ)にも「トポロジカルソートを知っていれば一瞬だが、知らないと解けない。」
と書いています。
『アルゴリズム実技検定』という本の模範解答を見ても、「トポロジカルソート」によって頂点に番号を割り振ったりはしていません。
つまり「トポロジカルソート」など不要ではないかと思うんです。
以下がジャッジにパスした私のPythonのコードです。
https://ideone.com/iQIvcc
AtCoderの出題ページは以下になります。
https://atcoder.jp/contests/dp/tasks/dp_g
『アルゴリズム実技検定』という本の解説を読みますと「トポロジカルソート」という考え方を使うと書いてあります。
私は「トポロジカルソート」について何も知りませんが、制限時間内に答えを出すPythonプログラムを書けました。
本当に「トポロジカルソート」というのが必要でしょうか?
なお、上記ページにリンクが貼ってある解説のページ(hamayanhamayanというユーザーの解説のページ)にも「トポロジカルソートを知っていれば一瞬だが、知らないと解けない。」
と書いています。
『アルゴリズム実技検定』という本の模範解答を見ても、「トポロジカルソート」によって頂点に番号を割り振ったりはしていません。
つまり「トポロジカルソート」など不要ではないかと思うんです。
以下がジャッジにパスした私のPythonのコードです。
https://ideone.com/iQIvcc
48デフォルトの名無しさん
2021/10/11(月) 16:25:53.01ID:bJ9NE0N32021/10/12(火) 00:41:32.76ID:mo6bbxTQ
まず、動的計画法の実現方法にはトップダウン方式とボトムアップ方式があり、メモ化再帰はトップダウン方式の実現方法に当たります
こちらは日本語版のWikipediaにも記載があります
https://ja.m.wikipedia.org/wiki/%E5%8B%95%E7%9A%84%E8%A8%88%E7%94%BB%E6%B3%95
トポロジカルソートの知識が必須になるのは、ボトムアップ方式で実現する場合です
メモ化再帰する場合にはトポロジカルソートを意識する必要はありません
ここで行われているメモ化再帰の実装は、深さ優先検索を用いたトポロジカルソートの実装と類似しており、結果的にトポロジカルソートの逆順で計算結果が確定されていくことになります
こちらは日本語版のWikipediaにも記載があります
https://ja.m.wikipedia.org/wiki/%E5%8B%95%E7%9A%84%E8%A8%88%E7%94%BB%E6%B3%95
トポロジカルソートの知識が必須になるのは、ボトムアップ方式で実現する場合です
メモ化再帰する場合にはトポロジカルソートを意識する必要はありません
ここで行われているメモ化再帰の実装は、深さ優先検索を用いたトポロジカルソートの実装と類似しており、結果的にトポロジカルソートの逆順で計算結果が確定されていくことになります
2021/10/12(火) 07:51:06.12ID:9oya6EGe
51デフォルトの名無しさん
2021/10/15(金) 14:52:49.77ID:n9WPu0Ca https://atcoder.jp/contests/past201912-open/tasks/past201912_i
↑の問題を↓のように解きました。
https://ideone.com/osdCtN
コメントアウトしている行をアンコメントするとジェッジにパスしなくなります。
理由が分かりません。
理由が分かる方、教えて下さい。
↑の問題を↓のように解きました。
https://ideone.com/osdCtN
コメントアウトしている行をアンコメントするとジェッジにパスしなくなります。
理由が分かりません。
理由が分かる方、教えて下さい。
52デフォルトの名無しさん
2021/10/15(金) 15:11:44.64ID:n9WPu0Ca あ、わかりました。
2021/10/15(金) 15:13:27.96ID:/Buyr3BY
よかったね、さようなら
54デフォルトの名無しさん
2021/10/24(日) 20:12:12.31ID:tzzO99P4 https://atcoder.jp/contests/past202004-open/tasks/past202004_f
この問題は貪欲法が適用できるとのことですが、適用できることの証明はどう証明するのでしょうか?
この問題は貪欲法が適用できるとのことですが、適用できることの証明はどう証明するのでしょうか?
2021/10/24(日) 22:55:10.72ID:340Kt+5N
>>54
k日間で得られるポイントの合計の最大値を P(k) と表し、k日目に解禁されるタスクが2つあってそれぞれのポイントを p, q (p < q) とする。
貪欲法でないやり方で求めた最適解P(k)*があるとする。--- (1)
貪欲法でないある方針に基づいてpポイントのタスクを選択したとする。
このとき、貪欲法に基づいてqポイントのタスクを選択したとすると、P(k) = P(k)* + q - p となる更に良い解が得られ、(1) の「貪欲法でなくても最適解」の前提条件に矛盾する。
毎回思うけどこの atcoder てあんまり良くないね。
日本語の問題文があるから重宝されてるのかもしれないけど、入力のサイズが小さすぎてブルートフォースでも瞬時に解けたり、解説ないからもっと良い解があるのかわからないし、leetcode あたりのが勉強になると思う。
k日間で得られるポイントの合計の最大値を P(k) と表し、k日目に解禁されるタスクが2つあってそれぞれのポイントを p, q (p < q) とする。
貪欲法でないやり方で求めた最適解P(k)*があるとする。--- (1)
貪欲法でないある方針に基づいてpポイントのタスクを選択したとする。
このとき、貪欲法に基づいてqポイントのタスクを選択したとすると、P(k) = P(k)* + q - p となる更に良い解が得られ、(1) の「貪欲法でなくても最適解」の前提条件に矛盾する。
毎回思うけどこの atcoder てあんまり良くないね。
日本語の問題文があるから重宝されてるのかもしれないけど、入力のサイズが小さすぎてブルートフォースでも瞬時に解けたり、解説ないからもっと良い解があるのかわからないし、leetcode あたりのが勉強になると思う。
56デフォルトの名無しさん
2021/10/25(月) 11:24:00.83ID:vmRZrQEp まるちんこ
57デフォルトの名無しさん
2021/10/25(月) 12:10:28.14ID:Ex1ycVpJ 以下のような感じで証明できないですかね?
タスク T のポイントを p(T) で表すことにする。
貪欲法によって選ばれたタスク列を
T_1, T_2, …, T_n
とする。
S := {(S_1, S_2, …, S_k) | 1 ≦ k ≦ n, S_i は第i日に行うタスク, p(S_1 + … + S_k) > p(T_1 + … + T_k)}
S が空集合ではないとして矛盾を導く。
(S_1, S_2, …, S_l) を長さが最小の S の元とする。
p(S_1) + … + p(S_{l-1}) ≦ p(T_1) + … + p(T_{l-1})
タスク T のポイントを p(T) で表すことにする。
貪欲法によって選ばれたタスク列を
T_1, T_2, …, T_n
とする。
S := {(S_1, S_2, …, S_k) | 1 ≦ k ≦ n, S_i は第i日に行うタスク, p(S_1 + … + S_k) > p(T_1 + … + T_k)}
S が空集合ではないとして矛盾を導く。
(S_1, S_2, …, S_l) を長さが最小の S の元とする。
p(S_1) + … + p(S_{l-1}) ≦ p(T_1) + … + p(T_{l-1})
2021/10/25(月) 16:58:37.64ID:Ex1ycVpJ
Introduction to Algorithms 3rd Editionがくどすぎて読みにくい。
59デフォルトの名無しさん
2021/10/26(火) 11:19:31.94ID:CwYCZWUI タスク T のポイントを p(T) で表すことにする。
貪欲法によって選ばれたタスク列を
T_1, T_2, …, T_n
とする。
S := {k | 1 ≦ k ≦ n, 第1日目から第k日目の間に得られるポイントの合計の最大値 > p(T_1) + … + p(T_k)} が空集合ではないと仮定して矛盾を導く。
k_0 := min S とおく。
第1日目から第k_0日目の間に得られるポイントの合計の最大値を達成するタスク列を
S_1, S_2, …, S_{k_0} とする。
仮定により、
p(S_1) = p(T_1)
p(S_2) = p(T_2)
…
p(S_{k_0-1}) = p(T_{k_0-1})
p(S_{k_0}) > p(T_{k_0})
が成り立つ。
貪欲法によって選ばれたタスク列を
T_1, T_2, …, T_n
とする。
S := {k | 1 ≦ k ≦ n, 第1日目から第k日目の間に得られるポイントの合計の最大値 > p(T_1) + … + p(T_k)} が空集合ではないと仮定して矛盾を導く。
k_0 := min S とおく。
第1日目から第k_0日目の間に得られるポイントの合計の最大値を達成するタスク列を
S_1, S_2, …, S_{k_0} とする。
仮定により、
p(S_1) = p(T_1)
p(S_2) = p(T_2)
…
p(S_{k_0-1}) = p(T_{k_0-1})
p(S_{k_0}) > p(T_{k_0})
が成り立つ。
60デフォルトの名無しさん
2021/10/26(火) 11:33:36.58ID:CwYCZWUI このとき、長さ n のタスク列 S_1, S_2, …, S_{k_0-1}, R_{k_0}, R_{k_0+1}, …, R_{n} で
p(R_{k_0}) = p(T_{k_0})
p(R_{k_0+1}) = p(T_{k_0+1})
…
p(R_{n}) = p(T_{n})
を満たすようなものが存在することは明らかである。
このタスク列 S_1, S_2, …, S_{k_0-1}, R_{k_0}, R_{k_0+1}, …, R_{n} も貪欲法によって選ばれうるタスク列である。
ところが、タスク列 S_1, S_2, …, S_{k_0-1}, R_{k_0}, R_{k_0+1}, …, R_{n} は第k_0日において、 p(S_{k_0}) > p(T_{k_0}) = p(R_{k_0}) であるにもかかわらず、
タスク S_{k_0} を選択しないタスク列であるから、このタスク列は貪欲法によって選ばれうるタスク列ではない。
これは矛盾である。
よって、 S は空集合である。
p(R_{k_0}) = p(T_{k_0})
p(R_{k_0+1}) = p(T_{k_0+1})
…
p(R_{n}) = p(T_{n})
を満たすようなものが存在することは明らかである。
このタスク列 S_1, S_2, …, S_{k_0-1}, R_{k_0}, R_{k_0+1}, …, R_{n} も貪欲法によって選ばれうるタスク列である。
ところが、タスク列 S_1, S_2, …, S_{k_0-1}, R_{k_0}, R_{k_0+1}, …, R_{n} は第k_0日において、 p(S_{k_0}) > p(T_{k_0}) = p(R_{k_0}) であるにもかかわらず、
タスク S_{k_0} を選択しないタスク列であるから、このタスク列は貪欲法によって選ばれうるタスク列ではない。
これは矛盾である。
よって、 S は空集合である。
61デフォルトの名無しさん
2021/10/31(日) 19:17:33.86ID:BY7qrcrb https://atcoder.jp/contests/nikkei2019-qual/tasks/nikkei2019_qual_c
↓途中の段階で最終的に得られる互いの幸福度の総和をどうやって彼らは知るのでしょうか?
ただし、彼らはともに、「最終的に自分が得る幸福度の総和」から「最終的に相手が得る幸福度の総和」を引いた値を最大化するように料理を選びます。
このとき、「最終的に高橋くんが得る幸福度の総和」から「最終的に青木さんが得る幸福度の総和」を引いた値はいくつになるでしょうか?
↓途中の段階で最終的に得られる互いの幸福度の総和をどうやって彼らは知るのでしょうか?
ただし、彼らはともに、「最終的に自分が得る幸福度の総和」から「最終的に相手が得る幸福度の総和」を引いた値を最大化するように料理を選びます。
このとき、「最終的に高橋くんが得る幸福度の総和」から「最終的に青木さんが得る幸福度の総和」を引いた値はいくつになるでしょうか?
62デフォルトの名無しさん
2021/11/02(火) 10:37:08.97ID:px0qcy1y63デフォルトの名無しさん
2021/11/02(火) 13:38:39.49ID:RQoewYsN 『Introduction to Algorithms 3rd Edition』よりも『Algorithm Design』のほうがずっといい本だと思うのですが、どうですか?
64デフォルトの名無しさん
2021/11/03(水) 18:42:32.00ID:K+j19pQn https://i.imgur.com/EqwQfdx.jpg
↑は、Dijkstraのアルゴリズムの擬似コードですが、これって間違っていますよね?
Sに付け加えられるvに対してのみd[v]を計算しています。
↑は、Dijkstraのアルゴリズムの擬似コードですが、これって間違っていますよね?
Sに付け加えられるvに対してのみd[v]を計算しています。
2021/11/03(水) 19:10:00.22ID:p70BP33u
追加される時点で最短距離が決定するから問題ないと思うが。
2021/11/03(水) 19:38:24.24ID:K+j19pQn
>>65
ありがとうございました。
あ、d'[v]のほうは更新され続けるんですね。
そして、最後に、Sに入れられるときに、d[v]に確定したd'[v]の値を入れているんですね。
dなんて使わずにd'だけでいいのにと思います。
ありがとうございました。
あ、d'[v]のほうは更新され続けるんですね。
そして、最後に、Sに入れられるときに、d[v]に確定したd'[v]の値を入れているんですね。
dなんて使わずにd'だけでいいのにと思います。
2022/03/05(土) 12:18:28.50ID:c2cv6ICZ
2022/03/05(土) 18:15:22.85ID:2/qEYPh4
>>67
グロ
グロ
2022/04/09(土) 22:56:02.65ID:NDf9sYGT
頭では分かってるつもりなんだけど
どうしても実際にはif , switchのオンパレードになっちゃんだよな
特に仕事だと、学術論的なことでぐずぐずハマってたら
なにやってんだってはなしになることが多い
どうしても実際にはif , switchのオンパレードになっちゃんだよな
特に仕事だと、学術論的なことでぐずぐずハマってたら
なにやってんだってはなしになることが多い
70デフォルトの名無しさん
2022/08/31(水) 20:45:30.79ID:CIcCYvEQ 『アルゴリズム実技検定公式テキスト』という本に以下の最長パスの問題の出題と解答が書いてあります.
https://atcoder.jp/contests/dp/tasks/dp_g
解説を読むと,この問題を解くのに,トポロジカルソートが重要だと書いてあります.
https://atcoder.jp/contests/dp/tasks/dp_g
解説を読むと,この問題を解くのに,トポロジカルソートが重要だと書いてあります.
71デフォルトの名無しさん
2022/08/31(水) 20:52:44.34ID:CIcCYvEQ 解答は以下のような感じです:
length(v)を点vからの最長パスの長さとします.
v → w_1
v → w_2
…
v → w_n
という辺があるとき,length(v) = max{length(w_1), …, length(w_n)}
とメモ化再帰により計算する.(深さ優先探索を使う.)
この解答のどこでトポロジカルソートの考えが使われているのかが分かりません.
length(v)を点vからの最長パスの長さとします.
v → w_1
v → w_2
…
v → w_n
という辺があるとき,length(v) = max{length(w_1), …, length(w_n)}
とメモ化再帰により計算する.(深さ優先探索を使う.)
この解答のどこでトポロジカルソートの考えが使われているのかが分かりません.
72デフォルトの名無しさん
2022/08/31(水) 20:55:47.47ID:CIcCYvEQ 入次数が0の点達からメモ化再帰(深さ優先探索)を行っています.
73デフォルトの名無しさん
2022/08/31(水) 20:58:25.24ID:CIcCYvEQ2022/09/01(木) 09:35:46.60ID:NAQLmVKw
入字数0の点が最長パスの始点候補だから、トポロジカルソートしたら始点から終点までの経路上の辺の長さをを足し合わせていけばいい
75デフォルトの名無しさん
2022/09/04(日) 06:43:45.43ID:x0sSmgMe でもトポロジカルソートしていないですよね.プログラムを見ると.
76デフォルトの名無しさん
2022/09/18(日) 14:40:45.95ID:suxGffYa C++の連結リスト(list)の削除に必要な計算量がO(1)であると大槻の本に書いてあるのですが、
削除したい要素を探すのにO(N)必要だと思います。
これって単に、指定した位置の要素を削除するという操作だからO(1)ということですか?
削除したい要素を探すのにO(N)必要だと思います。
これって単に、指定した位置の要素を削除するという操作だからO(1)ということですか?
レスを投稿する
ニュース
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★2 [ぐれ★]
- 【中国局長】両国関係に「深刻な影響」 首相発言の撤回要求 [蚤の市★]
- 【卓球】早田ひな、「総額100万スられた」「ずっと憧れていたスペインとイタリア…」ヨーロッパ旅行で悲劇 スリ被害を告白 [muffin★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★3 [BFU★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 日経平均の下落率3%超す、財政懸念で長期金利上昇 ★2 [お断り★]
- 【実況】博衣こよりのえちえち歌枠🧪★2
- 【画像】外務省局長「この度はうちの🦎がすみません…」中国「……」 [165981677]
- 産経新聞「高市早苗の答弁さぁ……思慮が足りてなくね?官僚と詰めずに思いつきで話しているでしょ」 [175344491]
- 【高市速報】日本人の3割「中国への武力行使に踏み切る必要がある」ANN世論調査 [931948549]
- 【雑談】暇人集会所part18
- 外務省局長、よくわからないまま帰国へ [834922174]
