1 名前:デフォルトの名無しさん mailto:sage [2020/01/27(月) 22:28:35.79 ID:yq8WVV9K.net] 【前スレ】 データ構造,アルゴリズム,デザインパターン総合スレ 3 https://mevius.5ch.net/test/read.cgi/tech/1466315249/ 【関連スレ】 3Dアルゴリズム全般 toro.2ch.net/test/read.cgi/tech/1164171086/ <集大成>アルゴリズム大辞典 toro.2ch.net/test/read.cgi/tech/1086272325/ アルゴリズム総合スレ in ム板 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
2 名前:デフォルトの名無しさん [2020/07/27(月) 12:25:50.05 ID:n24uY58k.net] 深さ優先探索の計算時間がO(|V| + |E|)と評価されるのはなぜですか? |V| << |E|だから、O(|E|)でOKな気がします。
3 名前:デフォルトの名無しさん mailto:sage [2020/07/27(月) 12:40:31.34 ID:NergLkg0.net] わからんけどグラフの連結性を仮定してないのでは
4 名前:デフォルトの名無しさん mailto:sage [2020/07/27(月) 15:17:43.62 ID:BQ7JhCRr.net] >>2 |E| < |V|^2 だぞ
5 名前:デフォルトの名無しさん mailto:sage [2020/09/22(火) 22:37:15.01 ID:Ok4HXOVw.net] 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)
6 名前:デフォルトの名無しさん mailto:sage [2020/09/22(火) 23:17:08.08 ID:txyi13VO.net] 二部グラフの最小重み完全マッチングでいけないかな
7 名前:デフォルトの名無しさん mailto:sage [2020/09/22(火) 23:22:00.48 ID:txyi13VO.net] でいけないかなというか,二部グラフの最小重み完全マッチングと同じかな それならハンガリアン法とか最小費用流で解けるのでは
8 名前:デフォルトの名無しさん mailto:sage [2020/09/22(火) 23:31:12.82 ID:Ok4HXOVw.net] ありがとうございます 調べてみます
9 名前:デフォルトの名無しさん [2020/11/08(日) 15:47:31.10 ID:hnEKBOnE.net] 開票所要時間は理論上 O(log n) だよね? 【米大統領選】日本なら一晩で終わる開票作業 なぜそんなに時間がかかったのか(デイリー新潮) https://news.yahoo.co.jp/articles/e7f705c442fa18c1455c579a7cd209861ef6212b
10 名前:デフォルトの名無しさん mailto:sage [2020/11/08(日) 15:50:45.10 ID:YOqFgelx.net] アルゴリズムで書いたら判定してやるよ
11 名前:デフォルトの名無しさん [2020/11/08(日) 16:03:50.98 ID:hnEKBOnE.net] 自明なので判定するまでもないが。
12 名前:デフォルトの名無しさん [2020/11/08(日) 16:28:09.83 ID:BBDku6LQ.net] データ構造とアルゴリズムって人気ないの?
13 名前:デフォルトの名無しさん [2020/11/29(日) 20:21:41.24 ID:rAnHdnpn.net] これの 9.3. Solution が何故これで正解が導き出せるのか理解できないんですが もう少しどなたか詳細に解決して頂けないでしょうか。 https://codility.com/media/train/7-MaxSlice.pdf
14 名前:デフォルトの名無しさん mailto:sage [2020/11/29(日) 21:27:01.68 ID:exnO589A.net] dpテーブル作って考えたほうがわかりやすいと思います https://www.nii.ac.jp/userdata/shimin/documents/H22/100805_3rdlec.pdf これの19ページとか
15 名前:デフォルトの名無しさん [2020/11/29(日) 21:37:18.71 ID:M8xgBTYt.net] そのPDFファイルに書いてあることの繰り返しになりますが,以下が成り立つからです. 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.40 ID:M8xgBTYt.net] 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であるということになってしまうからです.
17 名前:デフォルトの名無しさん mailto:sage [2020/11/29(日) 23:01:49.05 ID:0fgKV2B3.net] >>13 これ最初から足していってマイナスになったらリセットしてまた足し始める それまでの最大を超えたら最大値を更新するってだけじゃないの マイナスになったらそれを足し続けても得しないって訳だから
18 名前:デフォルトの名無しさん mailto:sage [2020/11/29(日) 23:10:03.18 ID:M8xgBTYt.net] そうですね. 足していってマイナスにならなければ,無いよりはましだから,捨てずにsliceに含め続けるということですね.
19 名前:(u_・y) mailto:sage [2020/11/30(月) 17:46:41.21 ID:nGWGFXsH.net] そうですよ。マイナスでさえなければ、いないよりはマシだから、あなたも雇われ続けているんです。 さらに2 + 2は必ずしも4ではなく、2 +2 = 80にもなるんです。
20 名前:デフォルトの名無しさん mailto:sage [2020/12/03(木) 18:30:54.40 ID:Fq1nYucp.net] >>14 分離定理初めて知った、しゅごい まあ算術でとかループでとか、ジャンプと変数があればとか、λさえあれば…とか似たような定理は見掛けたけど、は低レベル過ぎて指針にならんからな これらでできないかひとしきり考えてみることにする (もちろんちゃんと使える演算子は使います)
21 名前:デフォルトの名無しさん mailto:sage [2020/12/22(火) 15:07:11.40 ID:h5DFCbD/.net] 近似アルゴリズムの本に 極大マッチングは,単に辺を一つずつ選んでいきながら,選んだ辺の両端点とそれらに接続するすべての辺を除いて辺がなくなるまで繰り返すことで得られる とあり,nを頂点の数,mを辺の数としたとき,計算時間がO(n + m)と書いてあるのですが nはどこから来たのでしょうか 両方に点が残っている辺を見ていけばいいのでO(m)でできると思うのですが
22 名前:デフォルトの名無しさん mailto:age [2020/12/31(木) 21:02:35.54 ID:pjMyqahK.net] ArrayListって実装的にはただの可変長配列ですか?
23 名前:デフォルトの名無しさん mailto:sage [2021/01/01(金) 06:52:59.87 ID:L8CQYPdE.net] >>16 これは、最大連続区間か?
24 名前:デフォルトの名無しさん mailto:sage [2021/02/27(土) 15:27:53.95 ID:cGuo4IiQ.net] ウィキペディアの焼きなまし法 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が更新されるように見えますが
25 名前:デフォルトの名無しさん mailto:sage [2021/02/27(土) 16:54:14.85 ID:Hg2wHc/X.net] 小さい方が良いでしょ
26 名前:デフォルトの名無しさん mailto:sage [2021/02/27(土) 16:54:38.59 ID:q6FQGtjh.net] 値が小さい方が望ましい
27 名前:デフォルトの名無しさん mailto:sage [2021/02/27(土) 17:10:02.18 ID:cGuo4IiQ.net] よく読んでなかったすまんかった
28 名前:デフォルトの名無しさん mailto:sage [2021/03/08(月) 16:54:28.07 ID:H4OoIpXQ.net] 焼きなましに例えるんだからEnergyのEだろうね 線形計画法が流行ってた時代はとりあえず目標関数は最大化するものとしてた風潮があった(LPでは双対問題と厳密に等価) シュミレーション分野、最近の機械学習の流行りでとりあえずコスト関数を最小化する雰囲気 LPじゃないんで同じ点で極値を与える関数にも良し悪しがある点には気を付けねば 実数関数なら符号の反転と、並進に依らないアルゴリズムであれば並進を加えたもののみ等価
29 名前:デフォルトの名無しさん mailto:sage [2021/03/17(水) 19:38:57.60 ID:DuV9YnX6.net] 初歩的な質問かもしれず、恐縮ですがお願いいたします。 i Phoneを使って、端末が始点から終点まで移動した角度をx,y,z(オイラー角)で取得したいと考えています。 最初は、始点と終点の端末の位置をオイラー角で取得し、その差分を出してみたのですが、ジンバルロックによりpitchの値を正確に取得できませんでした。 ジンバルロックを回避するためクォータニオンを使うといいようなのですが、クォータニオンを使って目的の値を算出する方法が分からない状態です。 もし分かる方がおられましたら、ご助言いただると幸いです。 よろしくお願いします。
30 名前:デフォルトの名無しさん mailto:sage [2021/05/19(水) 16:18:22.70 ID:7NWiu4qI.net] Minimum Mean Cycleでこのスライドを見ているのですが 3ページでmaxをとっているのに正しい答えがでる理由ってなんでですか? www.columbia.edu/~cs2035/courses/ieor6614.S16/mmc.pdf (d^n(v) - d^k(v)) / (n - k)はvからスタートしたときのMean Cycleですよね d^k(v)が無限の場合を避けるためにmaxをとっていると思うのですが,なぜ正しい答えになるのでしょうか
31 名前:デフォルトの名無しさん mailto:sage [2021/05/22(土) 02:18:16.19 ID:/00w7bM8.net] >>29 取り敢えず理解はほっといて動けばいいのなら、ウィキペにでも公式載ってたと思うよ
32 名前:デフォルトの名無しさん [2021/10/03(日) 17:59:42.80 ID:nkudyinT.net] 幅優先探索の計算量がO(N)ではなくO(N + E)なのはなぜ? Nは頂点の数、Eは辺の数です。
33 名前:デフォルトの名無しさん mailto:sage [2021/10/03(日) 20:36:41.51 ID:KyHKDHW1.net] 辺の数だけ処理が増えるから 頂点の数を同じにして辺の数が異なる2つのグラフを比較してみればわかる
34 名前:デフォルトの名無しさん mailto:sage [2021/10/03(日) 22:55:23.59 ID:45cLxSS6.net] モートン順序によって当たり判定を一瞬で計算するというのがありました あれ特定の境目の上にオブジェクトがあるとすべてのオブジェクトとの衝突判定が発生するんですが 世の中のゲームってそんなふうにやってるんですか
35 名前:デフォルトの名無しさん [2021/10/04(月) 18:40:34.82 ID:N2yAdGNd.net] 計算量がO(V + E)であるの定義は何ですか?
36 名前:デフォルトの名無しさん mailto:sage [2021/10/04(月) 22:35:12.16 ID:qkBPKVDO.net] それは計算量の定義をきいているのか?
37 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 00:11:45.95 ID:wQtjKuKa.net] そのアルゴリズムの計算時間を 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/ランダウの記号
38 名前:デフォルトの名無しさん [2021/10/05(火) 02:13:06.84 ID:3IOuHtiP.net] >>37 ありがとうございます。 ですが、O(V + E)の中に書かれている式であるV + Eは2変数の関数です。それでも1変数の場合と同じ定義でいいんですか?
39 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 03:31:33.71 ID:wQtjKuKa.net] >>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) となる
40 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 08:50:55.08 ID:3IOuHtiP.net] >>39 なるほど。ありがとうございました。
41 名前:デフォルトの名無しさん [2021/10/10(日) 18:05:52.24 ID:6QW0WSDe.net] 以下のプログラミングコンテストの問題なのですが、『アルゴリズム実技検定』という本の解説では、これは動的計画法の問題であると書いてあります。 本当にこういうのも動的計画法と言いますか? https://atcoder.jp/contests/abc026/tasks/abc026_c
42 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 19:42:09.58 ID:CKYp8hS8.net] >>41 ツリーを作って再帰にもできそうだけど、番号の1番大きい社員から少ない社員に向かって1つずつ処理していけば動的計画法になるね 最初に各社員に部下の給料のリスト(最初は空)を持たせて、社員番号Nから2番に向かって部下の給料のリストに値があればそこから自分の給与を計算して上司のリストに加えることを繰り返す 社員N番を含めて部下がいない、自分の番が回ってきても部下の給料リストが空なら1を上司のリストに加えればいい
43 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 20:02:45.11 ID:CKYp8hS8.net] 部下の給与リストじゃなくて最大値と最小値だけ覚えとけばもっと賢いか
44 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 20:08:58.53 ID:6QW0WSDe.net] >>42-43 ありがとうございました。 『アルゴリズム実技検定』では、上司部下の関係を親子の関係と考えたツリーを考えて、再帰を使った深さ優先探索のような処理をしています。 そして、そのプログラムを動的計画法を使ったプログラムと書いています。
45 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 22:19:32.54 ID:shNjC7Q8.net] 英語版Wikipedia(その出展として挙げられている『アルゴリズムイントロダクション』)の説明に従うと、この例は部分問題重複性が無いので、動的計画法ではなく分割統治アルゴリズムと呼ぶべきでしょうね https://en.m.wikipedia.org/wiki/Dynamic_programming 競技プログラミング界隈だとこのような例も動的計画法と呼ぶ人はいますが、書籍でそれが一般的であるかのように書かれているのはあまりよくないように思えますね
46 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 22:22:05.61 ID:6QW0WSDe.net] >>45 ありがとうございました。
47 名前:デフォルトの名無しさん [2021/10/11(月) 16:16:04.73 ID:bJ9NE0N3.net] 閉路を含まない有向グラフのすべての有向パスのうち長さが最長の有向パスの長さを計算せよという問題について質問があります。 AtCoderの出題ページは以下になります。 https://atcoder.jp/contests/dp/tasks/dp_g 『アルゴリズム実技検定』という本の解説を読みますと「トポロジカルソート」という考え方を使うと書いてあります。 私は「トポロジカルソート」について何も知りませんが、制限時間内に答えを出すPythonプログラムを書けました。 本当に「トポロジカルソート」というのが必要でしょうか? なお、上記ページにリンクが貼ってある解説のページ(hamayanhamayanというユーザーの解説のページ)にも「トポロジカルソートを知っていれば一瞬だが、知らないと解けない。」 と書いています。 『アルゴリズム実技検定』という本の模範解答を見ても、「トポロジカルソート」によって頂点に番号を割り振ったりはしていません。 つまり「トポロジカルソート」など不要ではないかと思うんです。 以下がジャッジにパスした私のPythonのコードです。 https://ideone.com/iQIvcc
48 名前:デフォルトの名無しさん [2021/10/11(月) 16:25:53.01 ID:bJ9NE0N3.net] >>47 あともう一点。 この問題の出題カテゴリは動的計画法に属します。 『アルゴリズム実技検定』の模範解答も私のコードも、深さ優先探索 + 「メモ化再帰」で答えを計算しています。 >>45 確かにこの問題の場合部分問題重複性はあると思いますが、こういう単なる、いわゆる「メモ化再帰」も動的計画法と言っていいのでしょうか?
49 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 00:41:32.76 ID:mo6bbxTQ.net] まず、動的計画法の実現方法にはトップダウン方式とボトムアップ方式があり、メモ化再帰はトップダウン方式の実現方法に当たります こちらは日本語版のWikipediaにも記載があります https://ja.m.wikipedia.org/wiki/%E5%8B%95%E7%9A%84%E8%A8%88%E7%94%BB%E6%B3%95 トポロジカルソートの知識が必須になるのは、ボトムアップ方式で実現する場合です メモ化再帰する場合にはトポロジカルソートを意識する必要はありません ここで行われているメモ化再帰の実装は、深さ優先検索を用いたトポロジカルソートの実装と類似しており、結果的にトポロジカルソートの逆順で計算結果が確定されていくことになります
50 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 07:51:06.12 ID:9oya6EGe.net] >>49 ありがとうございました。 『アルゴリズム実技検定』でのコードは、トップダウン方式ですので、「トポロジカルソート」などという言葉を出さなくても良かったわけですね。
51 名前:デフォルトの名無しさん [2021/10/15(金) 14:52:49.77 ID:n9WPu0Ca.net] https://atcoder.jp/contests/past201912-open/tasks/past201912_i ↑の問題を↓のように解きました。 https://ideone.com/osdCtN コメントアウトしている行をアンコメントするとジェッジにパスしなくなります。 理由が分かりません。 理由が分かる方、教えて下さい。
52 名前:デフォルトの名無しさん [2021/10/15(金) 15:11:44.64 ID:n9WPu0Ca.net] あ、わかりました。
53 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 15:13:27.96 ID:/Buyr3BY.net] よかったね、さようなら
54 名前:デフォルトの名無しさん [2021/10/24(日) 20:12:12.31 ID:tzzO99P4.net] https://atcoder.jp/contests/past202004-open/tasks/past202004_f この問題は貪欲法が適用できるとのことですが、適用できることの証明はどう証明するのでしょうか?
55 名前:デフォルトの名無しさん mailto:sage [2021/10/24(日) 22:55:10.72 ID:340Kt+5N.net] >>54 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.83 ID:vmRZrQEp.net] まるちんこ
57 名前:デフォルトの名無しさん [2021/10/25(月) 12:10:28.14 ID:Ex1ycVpJ.net] 以下のような感じで証明できないですかね? タスク 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})
58 名前:デフォルトの名無しさん mailto:sage [2021/10/25(月) 16:58:37.64 ID:Ex1ycVpJ.net] Introduction to Algorithms 3rd Editionがくどすぎて読みにくい。
59 名前:デフォルトの名無しさん [2021/10/26(火) 11:19:31.94 ID:CwYCZWUI.net] タスク 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}) が成り立つ。
60 名前:デフォルトの名無しさん [2021/10/26(火) 11:33:36.58 ID:CwYCZWUI.net] このとき、長さ 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 は空集合である。
61 名前:デフォルトの名無しさん [2021/10/31(日) 19:17:33.86 ID:BY7qrcrb.net] https://atcoder.jp/contests/nikkei2019-qual/tasks/nikkei2019_qual_c ↓途中の段階で最終的に得られる互いの幸福度の総和をどうやって彼らは知るのでしょうか? ただし、彼らはともに、「最終的に自分が得る幸福度の総和」から「最終的に相手が得る幸福度の総和」を引いた値を最大化するように料理を選びます。 このとき、「最終的に高橋くんが得る幸福度の総和」から「最終的に青木さんが得る幸福度の総和」を引いた値はいくつになるでしょうか?
62 名前:デフォルトの名無しさん [2021/11/02(火) 10:37:08.97 ID:px0qcy1y.net] >>61 https://www.youtube.com/watch?v=SsB8VfxgZwQ
63 名前:デフォルトの名無しさん [2021/11/02(火) 13:38:39.49 ID:RQoewYsN.net] 『Introduction to Algorithms 3rd Edition』よりも『Algorithm Design』のほうがずっといい本だと思うのですが、どうですか?
64 名前:デフォルトの名無しさん [2021/11/03(水) 18:42:32.00 ID:K+j19pQn.net] https://i.imgur.com/EqwQfdx.jpg ↑は、Dijkstraのアルゴリズムの擬似コードですが、これって間違っていますよね? Sに付け加えられるvに対してのみd[v]を計算しています。
65 名前:デフォルトの名無しさん mailto:sage [2021/11/03(水) 19:10:00.22 ID:p70BP33u.net] 追加される時点で最短距離が決定するから問題ないと思うが。
66 名前:デフォルトの名無しさん mailto:sage [2021/11/03(水) 19:38:24.24 ID:K+j19pQn.net] >>65 ありがとうございました。 あ、d'[v]のほうは更新され続けるんですね。 そして、最後に、Sに入れられるときに、d[v]に確定したd'[v]の値を入れているんですね。 dなんて使わずにd'だけでいいのにと思います。
67 名前:デフォルトの名無しさん mailto:sage [2022/03/05(土) 12:18:28.50 ID:c2cv6ICZ.net] https://i.imgur.com/SLWsXcA.jpg
68 名前:デフォルトの名無しさん mailto:sage [2022/03/05(土) 18:15:22.85 ID:2/qEYPh4.net] >>67 グロ
69 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 22:56:02.65 ID:NDf9sYGT.net] 頭では分かってるつもりなんだけど どうしても実際にはif , switchのオンパレードになっちゃんだよな 特に仕事だと、学術論的なことでぐずぐずハマってたら なにやってんだってはなしになることが多い
70 名前:デフォルトの名無しさん [2022/08/31(水) 20:45:30.79 ID:CIcCYvEQ.net] 『アルゴリズム実技検定公式テキスト』という本に以下の最長パスの問題の出題と解答が書いてあります. https://atcoder.jp/contests/dp/tasks/dp_g 解説を読むと,この問題を解くのに,トポロジカルソートが重要だと書いてあります.
71 名前:デフォルトの名無しさん [2022/08/31(水) 20:52:44.34 ID:CIcCYvEQ.net] 解答は以下のような感じです: 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.47 ID:CIcCYvEQ.net] 入次数が0の点達からメモ化再帰(深さ優先探索)を行っています.
73 名前:デフォルトの名無しさん [2022/08/31(水) 20:58:25.24 ID:CIcCYvEQ.net] https://ideone.com/LvMx0h 例えば,上のプログラムのような感じです.
74 名前:デフォルトの名無しさん mailto:sage [2022/09/01(木) 09:35:46.60 ID:NAQLmVKw.net] 入字数0の点が最長パスの始点候補だから、トポロジカルソートしたら始点から終点までの経路上の辺の長さをを足し合わせていけばいい
75 名前:デフォルトの名無しさん [2022/09/04(日) 06:43:45.43 ID:x0sSmgMe.net] でもトポロジカルソートしていないですよね.プログラムを見ると.
76 名前:デフォルトの名無しさん [2022/09/18(日) 14:40:45.95 ID:suxGffYa.net] C++の連結リスト(list)の削除に必要な計算量がO(1)であると大槻の本に書いてあるのですが、 削除したい要素を探すのにO(N)必要だと思います。 これって単に、指定した位置の要素を削除するという操作だからO(1)ということですか?
77 名前:デフォルトの名無しさん mailto:sage [2022/09/18(日) 15:28:50.46 ID:69Jy4am9.net] 知らね。前後の文脈含めてなんて書いてあるの?
78 名前:デフォルトの名無しさん mailto:sage [2022/09/19(月) 12:07:14.08 ID:yWkM0kBX.net] >>76 そう 指定した位置というか指定したノードだけど
79 名前:デフォルトの名無しさん mailto:sage [2022/09/20(火) 01:12:54.08 ID:zbB+YFPz.net] >>75 トポロジカルソートが重要かはよくわからんけど 状態空間も遷移の考えもほとんど同じじゃん
80 名前:デフォルトの名無しさん [2022/09/26(月) 15:08:47.03 ID:cqAm7B1L.net] 比較に基づくソートの最悪の入力に対する実行時間の下限がΩ(n * log(n))であることの証明が分かりません。
81 名前:デフォルトの名無しさん [2022/09/26(月) 15:13:01.77 ID:cqAm7B1L.net] 決定木で説明しますが、その説明が分かりません。
82 名前:デフォルトの名無しさん mailto:sage [2022/09/26(月) 15:53:07.65 ID:Dh3HDIpo.net] そうか
83 名前:デフォルトの名無しさん [2022/09/26(月) 16:07:33.81 ID:cqAm7B1L.net] 比較に基づく任意のソートアルゴリズムに対して、その決定木って作れますか?
84 名前:デフォルトの名無しさん [2022/09/26(月) 18:12:30.08 ID:cqAm7B1L.net] 決定木の各ノードである2つの要素のペアの大小関係が決まりますが、その情報を利用しない場合にはどうなりますか?
85 名前:デフォルトの名無しさん mailto:sage [2022/09/26(月) 20:52:32.58 ID:Sp/QOOjd.net] 英語だけどイラスト付きで分かりやすく書いてある https://medium.com/enjoy-algorithm/lower-bound-of-comparison-sorting-c3e2225e3419
86 名前:デフォルトの名無しさん [2022/09/26(月) 21:50:30.08 ID:cqAm7B1L.net] >>85 ありがとうございました。
87 名前:デフォルトの名無しさん [2022/10/17(月) 16:05:05.43 ID:BBjAlznw.net] 命題2.4: 始点 s から各頂点へ最短路が存在すると仮定する。このとき、 s を根とする 有向全域木 T が存在して、 T における s から頂点 v への有向路は、 s から 頂点 v への最短路となっている。 証明: 始点 s から各頂点 v への最短路(の枝集合)を P_v とし、 T = ∪_{v ∈ V} P_v とおく。 定理2.3と命題2.2より、 P_v は単純有向路としてよい。 T の要素数がちょうど n - 1 であれば、 これは有向全域木であり、各頂点への最短路を含む。一方、 T の要素数が n 以上の場合は、 以下の手順で最短路を繰り返し修正することにより、所望の有向全域木を求めることができる。 T の要素数が n 以上と仮定する。このとき、ある頂点 v_* ∈ V - {s} が存在して、 T の中には v_* に向かう枝が2つ以上ある。 … v_* に向かう枝が2つ以上あることの証明ですが、どのような証明が典型的なものと考えられますか? 証明: T を無向グラフと考えたとき、 T は連結であり、 #T = n だから無向閉路が存在する。 T の作り方から s に向かう枝は存在しないから、 s はこの無向閉路上にはない。 仮に、上の v_* が存在しないと仮定する。 v を 上の無向閉路上の任意の頂点とする。 T の定義により、 T の中には v へ向かう枝が存在するが、 仮定により、そのような枝は唯一つしか存在しない。ゆえに、この無向閉路を有向グラフとして考えた とき、有向閉路である。 T の作り方から、 s から v への有向路が存在する。 ところが、 s は上の有向閉路には含まれないからこれは矛盾である。
88 名前:デフォルトの名無しさん [2022/10/17(月) 17:01:23.13 ID:BBjAlznw.net] もっと分かりやすく書き直しました: 命題2.4: 始点 s から各頂点へ最短路が存在すると仮定する。このとき、 s を根とする 有向全域木 T が存在して、 T における s から頂点 v への有向路は、 s から 頂点 v への最短路となっている。 証明: 始点 s から各頂点 v への最短路(の枝集合)を P_v とし、 T = ∪_{v ∈ V} P_v とおく。 定理2.3と命題2.2より、 P_v は単純有向路としてよい。 T の要素数がちょうど n - 1 であれば、 これは有向全域木であり、各頂点への最短路を含む。一方、 T の要素数が n 以上の場合は、 以下の手順で最短路を繰り返し修正することにより、所望の有向全域木を求めることができる。 T の要素数が n 以上と仮定する。このとき、ある頂点 v_* ∈ V - {s} が存在して、 T の中には v_* に向かう枝が2つ以上ある。 … v_* に向かう枝が2つ以上あることの証明ですが、どのような証明が典型的なものと考えられますか? 証明: T を無向グラフと考えたとき、 T は連結であり、 #T = n だから無向閉路が存在する。 仮に、上の v_* が存在しないと仮定する。 v を上の無向閉路上の任意の頂点とする。 T の定義により、 T の中には v へ向かう枝が存在するが、 仮定により、そのような枝は唯一つしか存在しない。ゆえに、この無向閉路を有向グラフとして考えた とき、有向閉路である。この有向閉路を C とする。 T の作り方から s に向かう枝は存在しないから、 s は C 上にはない。 T の作り方から、 s から v への有向路 P が存在する。 s は C 上にはなく、 v は C 上にあることに注意する。 P 上の頂点で最初に C 上の頂点ともなる頂点を w とする。 w は s とは異なるから、 P 上には、 w の直前の頂点 u が存在する。u は w についての仮定から、 C 上の頂点ではない。 w は C 上の頂点であるから、 w へ向かう C 上の枝が存在する。 以上から、 w へ向かう少なくとも2つ以上の枝が存在することになる。 これは矛盾である。
89 名前:デフォルトの名無しさん [2022/11/12(土) 19:54:31.16 ID:xCg5uX6U.net] アルゴリズムの学習で、ツリー構造のデータ詮索とか学習してるのだが。 一般的にデータってリレーショナルデータベースとか、 プログラムで利用するなら配列とかでしょ。 ツリー構造のデータってそんなあるの?
90 名前:デフォルトの名無しさん mailto:sage [2022/11/12(土) 20:16:08.76 ID:WvbeP05G.net] ファイルシステムとかHTMLとかいくらでもある
91 名前:デフォルトの名無しさん mailto:sage [2022/11/12(土) 21:18:58.24 ID:EqzcHwUy.net] XML
92 名前:デフォルトの名無しさん [2022/11/12(土) 23:06:22.44 ID:Y42oI462.net] パイ毛 パイ毛 パイ毛〜
93 名前:デフォルトの名無しさん mailto:sage [2022/11/12(土) 23:15:39.39 ID:mqwguCdy.net] データ詮索ワロタ
94 名前:デフォルトの名無しさん [2023/04/30(日) 19:23:01.90 ID:dQsz62eN.net] こんなスレが埋もれてるなんて信じられん お前らもっとアルゴリズム刻めよ
95 名前:デフォルトの名無しさん mailto:sage [2023/05/03(水) 01:15:28.00 ID:ZUlTYoGm.net] ニューラルネットワークでデータを詮索してみるか
96 名前:デフォルトの名無しさん [2023/05/27(土) 13:47:32.62 ID:dQE1+1Te.net] デザインパターンは廃れたよな
97 名前:デフォルトの名無しさん mailto:sage [2023/05/28(日) 16:34:40.65 ID:pV4wEcmO.net] エディタとかDBとか巨大外部リソースとのやりとりに関してのアルゴリズムはまだまだ再考の余地があると思う
98 名前:デフォルトの名無しさん [2023/06/28(水) 16:50:44.07 ID:BVdlIcNn.net] 漠∞!!!! 戸∞!!!!! 廷∞!!!!!! 与∞!!!!!!! 合∞!!!!!!!! 山∞!!!!!!!!! α∞!!!!!!!! 野∞!!!!!!!!
99 名前:デフォルトの名無しさん mailto:sage [2023/10/13(金) 19:28:46.40 ID:ANHPZuQm.net] では教育してやろう。”本当のオタク”の萌えに対する論理戦というものを……
100 名前:デフォルトの名無しさん mailto:sage [2023/10/29(日) 09:40:11.61 ID:nlAlD3dC.net] マージソートのmidの導出ですが mid=(left+right+1)//2 ではなく mid=(left+right)//2 なのはなぜでしょうか この1行で正しくソートできないのです pythonで勉強中の超初心者です よろしくお願いします
101 名前:デフォルトの名無しさん mailto:sage [2023/10/29(日) 09:40:36.19 ID:nlAlD3dC.net] マージソートのmidの導出ですが mid=(left+right+1)//2 ではなく mid=(left+right)//2 なのはなぜでしょうか この1行で正しくソートできないのです pythonで勉強中の超初心者です よろしくお願いします
102 名前:デフォルトの名無しさん mailto:sage [2023/12/23(土) 10:34:22.20 ID:9iMk1h5v.net] プログラムを最近勉強し始めたのですが二分探索木や赤黒木みたいなデータ構造って現場でも実際に使われているのですか?
103 名前:デフォルトの名無しさん [2023/12/23(土) 13:21:36.77 ID:ppz7uSBz.net] 必要になったことはないなあ、連想配列はハッシュテーブルの方が速いし ソートが必要ならリストを使う
104 名前:デフォルトの名無しさん mailto:sage [2023/12/23(土) 16:14:31.33 ID:mgbjvOvz.net] やっぱり使わないですよねぇ 今朝からAVL木練習してるんだけど、 やはり回転とかの作業分だけハッシュテーブルに比べると圧倒的に遅いんだよなぁ 当たり前だけど。
105 名前:デフォルトの名無しさん [2023/12/23(土) 16:22:46.85 ID:ppz7uSBz.net] 永続化データ構造は作りやすいから.NETのイミュータブルコレクションでは使われてるよ