タグ

algorithmに関するstibbarのブックマーク (38)

  • 初心者が学ぶP,NP,NP困難(Hard),NP完全(Complete)とは(わかりやすく解説) - MotoJapan's Tech-Memo

    (※訂正のため更新 18/4/23) 論文を読んでいると言葉だけ出会うが、見なかったことにしている言葉なのでちゃんと知りたい。 スタート:全く意味がわかっていないレベル ゴール:論文でその言葉の意味が掴めている状態 言葉の一般的な説明 P NP NP困難 (NP-Hard) NP完全 (NP-Complete) 分かりやすく説明 関係図 問題の難易度 Pの解説 判定問題とは 決定性チューリングマシン(機械)とは 多項式とは 「多項式時間で解ける」とは P読み直し NPの解説 非決定性チューリングマシンとは 「その証拠が当に正しいかどうかを多項式時間で判定できる」とは NP読み直し NP困難 (NP-Hard)の解説 NP完全 (NP-Complete)の解説 多項式時間還元(polynomial-time reduction)とは 決定性、非決定性チューリングマシンの違い P, NPの違

    初心者が学ぶP,NP,NP困難(Hard),NP完全(Complete)とは(わかりやすく解説) - MotoJapan's Tech-Memo
  • マトロイド - Wikipedia

    マトロイド(英: matroid)は、ある公理を満たす集合とそのべき集合の部分集合の組である。歴史的には、行列の一次独立・従属を一般化した概念であるが、多くの組合せ最適化問題をマトロイドあるいはより緩い独立性システムとコスト関数で定式化でき、特徴付けを行える等応用範囲は広い。特に組合せ最適化において、マトロイド上の最適化問題には単純な貪欲法によって多項式時間のアルゴリズムとは限らないものの最適解が得られることは非常に重要である。 E = {1, 2, 3} におけるそれぞれの例。左は(A1),(A2),(A3)を満たすからマトロイド。中央は(A1),(A2)を満たすから独立性システム。右は(A1),(A3)を満たすからグリードイド。 有限集合 E とその部分集合族 の組 (E, F) が[注 1] (A1) (A2) (A3) を満たすとき、マトロイドと呼ばれ、(A1) および (A2)

    マトロイド - Wikipedia
  • 最小全域木問題(クラスカル法とプリム法) - ぬいぐるみライフ?

    最小全域木問題を解くためのアルゴリズム「クラスカル法」と「プリム法」を使ってみた. 最小全域木について クラスカル法 プリム法 PKUの問題 クラスカル法による解答 プリム法による解答 メモリ使用量と実行時間の比較 最小全域木について まず,全域木(Spanning tree)とは連結グラフの全ての頂点とそのグラフを構成する辺の一部分のみで構成される木のこと.つまり,連結グラフから適当な辺を取り除いていき,閉路をもたない木の形にしたものが全域木となる.ここで,グラフの各辺に重みがある場合,重みの総和が最小になるように辺を選んで作った全域木のことを最小全域木(Minimum spanning tree)という. 最小全域木を求めるアルゴリズムとしては以下の二つが有名である. クラスカル法 (Kruskal's algorithm) プリム法 (Prim's algorithm) いずれも貪欲

    最小全域木問題(クラスカル法とプリム法) - ぬいぐるみライフ?
  • http://www.me.titech.ac.jp/~mizu_lab/text/PDF-IP/IP2D-P-IP-potential.pdf

  • 素人によるワーシャルフロイド法 - Qiita

    ワーシャルフロイド法 最短経路問題で使われるアルゴリズムの1つ。負の閉路がない限り、負の辺があっても使える。グラフ上の全ての頂点間の最短経路を探すので、計算量は$O(V^3)$となる。 ワーシャルフロイド法はその名前から難しそうな印象があって避けていた。しかし、最近競プロの精進中に実装する機会がチラホラあり、実装してみると思ったよりも簡単だったのでびっくりした。ワーシャルフロイド法が必要となった方は簡単な実装なので恐れず調べてみてほしい。 今回すること ワーシャルフロイド法は実装が簡単だが、その裏でどんな振る舞いをしているのかイマイチ掴めなかった。簡単に最短経路を求められるといっても、裏の仕組みを知らずに使うのは自分としてはどうも気持ちが悪い。今回はいろいろ手を動かしてみながら、仕組みの理解を試みる。 C++によるコード まずはワーシャルフロイド法のコードを見てみる。 void warsh

    素人によるワーシャルフロイド法 - Qiita
  • ダイクストラ法(最短経路問題)

    ダイクストラ法 (Dijkstra's Algorithm) は最短経路問題を効率的に解くグラフ理論におけるアルゴリズムです。 スタートノードからゴールノードまでの最短距離とその経路を求めることができます。 アルゴリズム 以下のグラフを例にダイクストラのアルゴリズムを解説します。 円がノード,線がエッジで,sがスタートノード,gがゴールノードを表しています。 エッジの近くに書かれている数字はそのエッジを通るのに必要なコスト(たいてい距離または時間)です。 ここではエッジに向きが存在しない(=どちらからでも通れる)無向グラフだとして扱っていますが, ダイクストラ法の場合はそれほど無向グラフと有向グラフを区別して考える必要はありません。 ダイクストラ法はDP(動的計画法)的なアルゴリズムです。 つまり,「手近で明らかなことから順次確定していき,その確定した情報をもとにさらに遠くまで確定していく

  • ベルマン–フォード法 - Wikipedia

    ベルマン–フォード法 (英: Bellman–Ford algorithm) は、重み付き有向グラフにおける単一始点の最短経路問題を解くラベル修正アルゴリズム[1]の一種である。各辺の重みは負数でもよい。辺の重みが非負数ならば優先度付きキューを併用したダイクストラ法の方が速いので、ベルマン–フォード法は辺の重みに負数が存在する場合に主に使われる。名称は開発者であるリチャード・E・ベルマンと Lester Ford, Jr. にちなむ。 グラフに「負閉路」(negative cycle) が含まれるとき、すなわち辺の重みの総和が負になるような閉路が存在するとき、好きなだけ小さな重みを持つ歩道を取れるので、「最短」経路は定まらない。このためベルマン-フォード法も負閉路が始点から到達可能である場合は正しい答を出せないが、負閉路を検出してその存在を報告することはできる。 ロバート・セジウィックによ

  • 動的計画法超入門! Educational DP Contest の A ~ E 問題の解説と類題集 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 0. はじめに: 非常に素敵な DP の入門コンテンツ 待ちに待ったコンテストの到来です!!!!! DP (動的計画法) はアルゴリズムの登竜門というべき難所ですが、いくつか問題を解いて行くとパターンのようなものが見えて来ます。まさに「習うより慣れろ」の世界で、たくさん問題を解いて行くうちに、DP な問題の解法を一言で言えるようになって来ます。 典型を学ぶ方法論として、その最も典型的なシンプルな形をした問題をそのまま吸収してしまうのは 1 つの有効な方法だと思います。それにふさわしいシンプルな問題たちを集めた DP コンテストが先日開か

    動的計画法超入門! Educational DP Contest の A ~ E 問題の解説と類題集 - Qiita
  • トポロジカルソート - Wikipedia

    トポロジカルソート(英: topological sort)は、グラフ理論において、有向非巡回グラフ(英: directed acyclic graph, DAG)の各ノードを順序付けして、どのノードもその出力辺の先のノードより前にくるように並べることである。有向非巡回グラフは必ずトポロジカルソートすることができる。 有向非巡回グラフのノードの集合に到達可能性関係 R (ノード x から y への(各辺の向きに逆行しない)経路が存在するとき、またそのときに限り xRy とする)を定めると、R は半順序関係となる。トポロジカルソートとは、この R を全順序になるように拡張したものとみなせる。 トポロジカルソートの典型的な利用例はジョブのスケジューリングである。トポロジカルソートのアルゴリズムはPERTというプロジェクト管理手法[1]のスケジューリングのために1960年代初頭に研究が開始された

    トポロジカルソート - Wikipedia
  • バケットソート - Wikipedia

    バケットソート(英: bucket sort)は、ソートのアルゴリズムの一つ。バケツソート、ビンソート(英: bin sort)などともいう。バケツ数 k 個使った場合、オーダーはO(n + k)となり、ソートする要素数nとk を無関係にできる場合線形時間ソートとなるが、要素間の全順序関係を用いるソートとは異なり、キーの取りうる値がk種類である、という入力により強い制限を要求するソートである。 バケットソートの概念 整列したいデータの取りうる値がm種類であるとき、m個のバケツを用意しておき、値ごとに1個のバケツを対応づける。元のデータ列を走査して、各データを対応するバケツに入れていく。この処理が終わった後、整列したい順序に従ってバケツから値を取り出せば、データをソートすることができる。 安定ソートを実現するためには、同じバケツに入っているデータは入れたときと同じ順序で取り出す必要がある。順

    バケットソート - Wikipedia
  • ヒープソート - Wikipedia

    ヒープソート (heap sort) とはリストの並べ替えを二分ヒープ木を用いて行うソートのアルゴリズムである[2](ヒープ領域とは無関係であることに注意する)。 アルゴリズムは、以下のように2つの段階から構成される。 未整列のリストから要素を取り出し、順にヒープに追加する。すべての要素を追加するまで繰り返し。 ルート(最大値または最小値)を取り出し、整列済みリストに追加する。すべての要素を取り出すまで繰り返し。 計算量は O となる[2]。安定ソートではない[2]。 ヒープ構造は、ポインタ等の制御用データが不要で、データ自体の並び順(配列)だけで表現できるという利点がある。ヒープソートを実装する際にはこの利点を生かし、元のデータ領域をそのままヒープ構造や整列済みリストに転用するインプレースなソートとして実装することが多い。 最初にN個のデータを含む配列が与えられるものとする。添字は1 〜

    ヒープソート - Wikipedia
  • GitHub - YukiNagai1016/swift_algorithm: Swiftアルゴリズム集

  • 解析不能!30年以上前のレトロゲームから謎の「自動生成アルゴリズム」が見つかる - ナゾロジー

    Point ■レトロゲームには容量不足や技術的制約を解決するため、現代の我々から見ても解析できない謎の技術が使われていることがある ■今回、ATARI2600から82年に発売されたゲーム『Entombed』に、全くロジックが不明の迷路自動生成プログラムのコードが発見された ■迷路の壁を完全ランダムに配置すればクリア不能になってしまうが、このプログラムがなぜ通行可能なパターンで迷路を生成しているかは、まったくの謎だという ほんの数十年前、コンピュータ関連の技術が飛躍的に向上しました。 特にデータ容量の向上はめざましく、現代の若い人たちにとって容量の単位は「ギガ」が標準になっています。 しかし初代のスーパーマリオの全ゲーム容量は40KB、初代ドラゴンクエストの全容量は64KBでした。 これはこの記事のトップに貼られている画像の容量よりも遥かに小さい容量です。 レトロゲームの開発は、そんな小さな

    解析不能!30年以上前のレトロゲームから謎の「自動生成アルゴリズム」が見つかる - ナゾロジー
  • AWSユーザーは必ず覚えておきたいExponential Backoffアルゴリズムとは何か - yoshidashingo

    cloudpackエバンジェリストの吉田真吾(@yoshidashingo)です。 Exponential Backoff 直訳すると「指数関数的後退」つまり、指数関数的に処理のリトライ間隔を後退させるアルゴリズムのことです。 詳しくはWikipediaに記載があります。 Exponential backoff - Wikipedia語でブログに書かれている方もいらっしゃいます。 exponential backoffのメモ – Siguniang's Blog これを見ていると、どうやらこのアルゴリズムは古くから通信装置において、イーサネットフレームのデータ送信時にコリジョン(衝突)を検出したら一定時間待機して再送して、処理を完結させるためのアルゴリズムとして使われているようです。 通信機器の世界に限らず、アプリケーションの分野でも、大規模で予測不能な処理量を有限なリソースでさばく

    AWSユーザーは必ず覚えておきたいExponential Backoffアルゴリズムとは何か - yoshidashingo
  • Exponential backoff - Wikipedia

    Exponential backoff is an algorithm that uses feedback to multiplicatively decrease the rate of some process, in order to gradually find an acceptable rate. These algorithms find usage in a wide range of systems and processes, with radio networks and computer networks being particularly notable. An exponential backoff algorithm is a form of closed-loop control system that reduces the rate of a con

  • 「1000のアルゴリズムを持つ男」vs.「やわらか頭脳」

    「1000のアルゴリズムを持つ男」vs.「やわらか頭脳」:最強最速アルゴリズマー養成講座(1/3 ページ) 典型的なアルゴリズムをたくさん知っている人間が最強か――? いいえ、典型的なアルゴリズムを知らなくても、違ったアプローチで答えに迫る方法はいくらでも存在します。短い実行時間で正確な答えを導き出せるかを考える習慣をつけましょう。 アルゴリズマー養成講座と銘打ってスタートした連載。もしかすると読者の方の興味は、はやりのアルゴリズムや汎用的なアルゴリズムを知ることにあるのかもしれません。しかし、今回は、いわゆる「典型的なアルゴリズム」を用いずに進めていきたいと思います。 なぜ典型的なアルゴリズムを用いないのか。それは、典型的なアルゴリズムばかりを先に覚え、それだけでTopCoderなどを戦っていこうとした場合、それに少しでもそぐわない問題が出た場合に、まったく太刀打ちできなくなってしまう

    「1000のアルゴリズムを持つ男」vs.「やわらか頭脳」
  • 何かを極めるということ。 - chokudaiのブログ

    この記事は、社長としてではなく、競技プログラミングの1選手としての記事になります。あんまり初心者への配慮とかしてません。 おそらく多くの人は、実践的に使えるアルゴリズムとかの記事を望んでるんだと思うんだけど、僕はどちらかというと、精神論のほうが得意なので。 近頃、当に弱くなったなぁ、と感じることが多い。 いや、周りが強くなったのかもしれない。昔判らなかった問題でも、今なら解ける。そういう問題は多い。それを考えると、昔よりは強くなっているが、相対的に弱くなっているだけかもしれない。 そりゃまぁ、RedCoder(Rating2200以上。日で30人程度の水準)を保つ程度なら出来る。確かにRedCoder手前に壁はある。だが、まともにコンテストに取り組んで、解けなかった問題をすべて復習する、それを数年間続けてれば、ある程度のセンスがあれば辿り着ける領域だ。さすがにそこから滑り落ちることはな

    何かを極めるということ。 - chokudaiのブログ
  • 最大公約数を簡単に求める計算プログラム

    最大公約数(G.C.D.)を簡単に求める計算プログラムです。 2つ以上5つまでの数値を入力すると、それらの値の最大公約数を計算して表示します。 * G.C.D.とは、Greatest Common Divisor の略です。 最大5つの数に対して計算可能です 入力値は最大5桁までの整数に限ります(負荷の関係で適当に制限かけてます) 入力値が「0」の場合は無視します

  • ハッシュ探索①(チェイン法) | Programming Place Plus アルゴリズムとデータ構造編【探索アルゴリズム】 第6章

    トップページ – アルゴリズムとデータ構造編 この章の概要 🔗 この章の概要です。 ハッシュ 衝突 チェイン法 ハッシュ関数 まとめ 練習問題 参考リンク 更新履歴 関連する話題が、以下のページにあります。 オープンアドレス法によるハッシュ探索 第7章 ハッシュ 🔗 この章では、ハッシュ探索という探索アルゴリズムを説明します。 ハッシュ探索は、O(1) という圧倒的に小さい計算量で探索を行える非常に優れたアルゴリズムです。つまり、データ数がどれだけあろうと、目的の要素がある場所をたった1回の計算だけで導き出せることを意味しています。どうしたらこんなことが可能になるのでしょうか? 原理はこうです。データを登録するときに、そのデータ自身の値を使って何らかの計算をおこなって、格納位置(通常、データ構造としては配列を使うので、その添字のこと)を決定します。 たとえば、登録するデータが整数だと仮

    ハッシュ探索①(チェイン法) | Programming Place Plus アルゴリズムとデータ構造編【探索アルゴリズム】 第6章
  • コンピュータ囲碁におけるモンテカルロ法 ~理論編~ 美添一樹