タグ

アルゴリズムに関するcomoglyのブックマーク (43)

  • 最短経路問題におけるアルゴリズム【A*探索】の調査

    最短経路問題におけるアルゴリズム【A*探索】の調査 佐藤 史隆, 廣安 知之, 三木 光範 ISDL Report  No. 20040716004 2004年 5月 26日 Abstract 1  はじめに 研究では, 効率の良いネットワークを遺伝的アルゴリズムにより作成することを目的としている. 最適化を行う際に, ネットワークの効率の良さを求めるために, ノード間の最短経路長を求める必要がある. 最短経路長を求めるアルゴリズムには, 全ての2点間の最短路・最短距離を求める方法であるウォーシャル・フロイド法(Warshall-Floyd法), 特定の2点間の最短路・最短距離を求めるダイクストラ法(Dijkstra法)などがある. 前報告[1], [2]においてウォーシャル・フロイド法(Warshall-Floyd法), ダイクストラ法(Dijkstra法)について調査を行い,

  • http://mikilab.doshisha.ac.jp/dia/research/report/2004/0716/002/report20040716002.html

  • Ibaraki Lab. (Kwansei Gakuin Univ.)

    茨木研究室の研究ターゲット 組合せ最適化問題 アルゴリズムの開発とその効率化 メタヒューリスティックによる近似アルゴリズム 問題解決エンジン 現実問題への応用 著作権 copyright©茨木研究室 カウンタ since June 2004 巡回セールスマン問題とは 平面上の n 点を一巡する最短巡回路を求める問題。困難な組合せ問題 の代表例として知られている。このデモは、225点の例であるが、最適解が 得られると“TSP”という文字が浮かび上がる。計算では、ランダムに初期解を発生 したのち、局所探索に基づく改良操作によって局所最適解を得ている。 反復のたびに異なる計算過程をたどるところに注目。

  • Introduction to Algorithms: Shortest Paths

    例えば... あなたの家の最寄り駅から四ッ谷駅までの鉄道の最短時間(もしくは最安)ルート を求める(駅すぱあと参照) カーナビを使って現在地から目的地までの最短経路を調べる 単純なアルゴリズム 出発地点から目的地までの全ての経路を調べる 経路の中で, 距離や料金が最も小さいものを選ぶ とても簡単, コンピュータを使わなくてもできる でも,目的地までの経路の総数が非常に多い場合には??? 効率的なアルゴリズムが必要

  • 最小費用流問題 - プログラミング所感

    最小費用流問題を最短路を使って解く方法。 LPで解けるが、LPソルバを使いたくないときに使える。 最短路を求めて、流せるだけ流す。 流したら、減らせるので逆向きのアークにもなるが、コストは負になる。 コストが負だとDijikstraが使えないので、開始ノードからのコストで補正する (補正コスト=コスト+元ノードのP値ー先ノードのP値)。P値は開始ノードからのコストの累積値。 ロジックがシンプルになるので、開始用のノード(st)と終了用のノード(en)を追加した。 計算速度よりわかりやすさを優先。 Graphクラスは、ORToolBoxより。 using McfGraph = Graph<McfNode, McfArc>; using McfNTag = NodeTag<McfNode, McfArc>; using McfATag = ArcTag<McfNode, McfArc>; //

    最小費用流問題 - プログラミング所感
  • 最小費用フロー問題とは何? わかりやすく解説 Weblio辞書

    読み方:さいしょうひようふろーもんだい 【英】:minimum cost flow problem 最小費用流問題ともいう.有向グラフと, 枝の容量と費用, 点の供給(需要)量が与えられたときに, 各枝の容量を超えず, 各点での正味の流出量が供給量と等しくなる枝上の流れをフローという. 各枝の流量に対する費用の総和を最小にするフローを求める問題の総称. 線形計画問題の特殊ケースである. 強多項式時間で解けることが知られている.

  • 動的計画法 - Wikipedia

    動的計画法(どうてきけいかくほう、英: Dynamic Programming, DP)は、計算機科学の分野において、アルゴリズムの分類の1つである。対象となる問題を複数の部分問題に分割し、部分問題の計算結果の記録を利用して全体の問題を解く手法を総称してこう呼ぶ。 細かくアルゴリズムが定義されているわけではなく、下記2条件を満たすアルゴリズムの総称である。 帰納的な関係の利用:より小さな問題例の解や計算結果を帰納的な関係を利用してより大きな問題例を解くのに使用する。 計算結果の記録:小さな問題例、計算結果から記録し、同じ計算を何度も行うことを避ける。帰納的な関係での参照を効率よく行うために、計算結果は整数、文字やその組みなどを見出しにして管理される。 「動的計画法(dynamic programming)」という言葉は1940年代にリチャード・E・ベルマンが最初に使いはじめ、1953年に現

    動的計画法 - Wikipedia
  • SoftComputing lab.

    3.探索法 対象となる問題をうまく探索木(又は有向グラフ)として表現できたら今度はその探索木を以下に効率よく調べるかが問題になります。これが探索の問題です。探索には節点を一つずつ調べていく必要がありますが、ゴール(求めたい解)にたどりつくまでになるべく少ない計算量で行くことができればよりいい探索法となります。(当たり前ですね。)つまり、より効率の良い順番で節点を調べていく方法が、良い探索法というわけです。 以下で扱う探索法は、探索木に対して何の予備知識も使わずに探索を行う単純な探索(ブラインド探索)と何らかの知識を用いた探索(ヒューリスティック探索)の2種類があります。 単純な探索法 (ブラインド探索) blind search 知識を用いない単純な探索法の中でも、もっとも基的なものに縦形探索と横形探索があります。この二つの方法は非常に単純なアルゴリズムなので作るのも簡単ですが、当然性能

  • 選択ソート - Wikipedia

    選択ソート(英: selection sort)は、ソートのアルゴリズムの一つ。 配列から最小値を探し、配列の先頭要素と入れ替えていくことで並べ替える。 最良時間計算量は O(n2) と遅いため、一般にはクイックソートなどのより高速な方法が利用される。しかし、空間計算量が限られるため他の高速な手法が使えない場合や、ソートする配列が充分小さく、選択ソートが高速に動作することが保証されている場合に利用されることがある。 選択ソートは内部ソートである。また、安定ソートではない。 選択ソートの改良として、ヒープソートが挙げられる。 Selection-Sort-Animation 選択ソートは以下の手順で行う: 1 番目の要素から最後尾の要素までで最も値の小さいものを探し、それを 1 番目の要素と交換する(1番目の要素までソート済みとなる) 以降同様に、未ソート部分の最小要素を探索し、未ソート部分

    選択ソート - Wikipedia
  • 定番アルゴリズムを徹底理解! - 今からでも遅くない!アルゴリズム入門:selfup

    このパートでは,プログラミングを勉強するうえで欠かせないアルゴリズムの中でも定番中の定番を紹介します。ソート(並べ替え)やサーチ(検索)などの機能は今では標準のライブラリとして提供されています。実用的なプログラムを作るときにそのものずばりをいちいち書く機会は少ないかもしれません。しかし定番のアルゴリズムは,様々に形を変えて普段のプログラミングに登場します。 解説を読んで仕組みがわかったら,ぜひそれをプログラムにしてみてください。読んだだけではプログラムを書けるようにはなりませんし,プログラムを書いてみて初めて,実は十分に理解できていなかったと気付くことがよくあります。しかもアルゴリズムは特定のプログラミング言語に依存しないので,一度身に付ければ,後でどんな言語を学ぶ場合でも役に立ちます。 1番目から6番目まではソートのアルゴリズム,7番目から9番目まではサーチのアルゴリズムです。一つひとつ

    定番アルゴリズムを徹底理解! - 今からでも遅くない!アルゴリズム入門:selfup
  • クイックソート - Wikipedia

    クイックソート(英: quicksort)は、1960年にアントニー・ホーアが開発したソートのアルゴリズム。分割統治法の一種。 個のデータをソートする際の最良計算量および平均計算量は (ランダウの記号)である。他のソート法と比べて一般的に最も高速だと言われている[2]が、対象のデータの並びやデータの数によっては必ずしも速いわけではなく、最悪の計算量はである。安定ソートではない。 クイックソートは以下の手順で行われる。 ピボットの選択:適当な値(ピボット(英語版)という)を境界値として選択する 配列の分割:ピボット未満の要素を配列の先頭側に集め、ピボット未満の要素のみを含む区間とそれ以外に分割する 再帰:分割された区間に対し、再びピボットの選択と分割を行う ソート終了:分割区間が整列済みなら再帰を打ち切る 配列の分割方法の一例として、以下のようなものが考えられる: 配列要素からピボット P

    クイックソート - Wikipedia
  • ダイクストラ法(最短経路問題)

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

  • 経路探索アルゴリズムA*をRubyで実装してみた - gan2 の Ruby 勉強日記

    前回書いた経路探索アルゴリズムA* - gan2 の Ruby 勉強日記が たくさんブクマされててちょっとびっくりです(;゚Д゚) 実装はFlash(Action Script)でやろうと思っていたのですが、 その前にRubyで書いてみることにしました。 途中、アルゴリズムの理解が不十分だったせいもあり、 多少てこづりましたがとりえず完成しました! ソースはあんまり整理してないけども、 あまり気にせずに貼り付けておきます(ノ∀`) =begin **** 経路探索アルゴリズムA*(エースター) a-star.rb **** アルゴリズムの概要 スタートノードから、あるノード n を通って、 ゴールまで辿り着くときの最短路経路を考える。 このとき、最短経路のコスト f(n) を次の式で表す。 f(n) = g(n) + h(n) ここで、g(n) はスタートノードから n までの最小コスト。

    経路探索アルゴリズムA*をRubyで実装してみた - gan2 の Ruby 勉強日記
  • 経路探索アルゴリズムA*をActionScript3.0で実装してみた - シン石丸の電脳芸事ニッキ

    ひさびさにプログラムネタ。 経路探索ってものを作ったことがなかったので、作ってみた。 A*(Aスター)というヤツがメジャーらしいので、それを。 このFlashの適当な場所をクリックすると、壁をよけてうまい具合に丸が動いて、クリックした場所にたどり着きます。 なかなか楽しい。 玉の移動にTweenerを使用。 参考は、WikipediaのA*と、gan2さんのRubyのコード。 Node.as AStar.as

    経路探索アルゴリズムA*をActionScript3.0で実装してみた - シン石丸の電脳芸事ニッキ
  • 一番右端の立っているビット位置を求める「ものすごい」コード - 当面C#と.NETな記録

    一番右端の立っているビット位置(RightMostBit)を求めるコードで速いのないかなーと探していたら、ものっっっすごいコードに出会ってしまったのでご紹介。2ch のビット演算スレで 32bit 値のコードに出会って衝撃を受けて、その後 64bit 値版のヒントを見つけたのでコードを書いてみました。 この問題は ハッカーのたのしみ―物のプログラマはいかにして問題を解くか (Google book search で原著 Hacker's delight が読めたのでそれで済ませた) で number of trailing zeros (ntz) として紹介されています。bit で考えたときに右側に 0 がいくつあるかを数えるもの。1 だと 0、2 だと 1、0x80 なら 7、12 なら 2 といったぐあい。0 のときに表題どおりの問題として考えるといくつを返すの?ってことになるので、

    一番右端の立っているビット位置を求める「ものすごい」コード - 当面C#と.NETな記録
  • 矢沢久雄の早わかりGoFデザインパターン(1) | 日経 xTECH(クロステック)

    今回は、パターンを1つだけ紹介します。「Mediatorパターン」です。GoFでは、それぞれのパターンの「目的]「背景」「効果」などが明示されています。私も、ちょっと真似をしてみましょう。複数のオブジェクトを組み合わせてプログラムの機能を実現するという目的において、オブジェクト間の関連がゴチャゴチャになってしまうという背景(問題)があり、Mediatorパターンの採用によって関連をキレイに整理できるという効果があります。説明だけでは、何のことだかわからないと思いますので、具体例をお見せしましょう。 図1[拡大表示](1)をご覧ください。これは、UML(Unified Modeling Language、ユーエムエル)と呼ばれる表記法で記述されたプログラムの設計図です。UMLでは、四角形の中に下線付きで名前を書いてオブジェクトを表し、関連のあるオブジェクトを矢印で結んで示します。ここで関連

    矢沢久雄の早わかりGoFデザインパターン(1) | 日経 xTECH(クロステック)
  • Part1 アルゴリズムと計算量を理解する

    量理論とは,一見してつかみどころのないアルゴリズムを定量的に把握し,その良し悪しを評価する考え方である。 アルゴリズム(Algorithm)とは,与えられた問題を解く手順のことだ。コンピュータの世界では,「プログラムによって問題を解く手順」ということになる。 JIS(日工業規格)は,アルゴリズムを次のように厳格に定義している。「明確に定義された有限個の規則の集まりであって,有限回適用することにより問題を解くもの。例えば,sin(X)を決められた精度で求める算術的な手順を,もれなく記述した文」(JIS X 0001-1987より)。 注目して欲しいのは,「有限個の規則」と「有限回適用」という言葉である。アルゴリズムを構成する規則の個数と,それを適用した時の処理の回数が有限であることが,アルゴリズムの条件になる。 したがって,それらの“数”からアルゴリズムの良し悪しを評価できることになる。例

    Part1 アルゴリズムと計算量を理解する
  • アルゴリズムとデータ構造I及び演習 (X121/X122)

  • アルゴリズムと計算量

    金庫破りと計算量膨張 n 桁の番号をもつ暗証ロックがあるとします。 2 桁であれば 00 〜 99 の 100 個の正解があるわけで、 0 番から順に入力していく解き方では、 最悪の場合は 100 手目に開きます。 99 が正解とは限らないので、平均的にはこれより早く解き終わります。 0 であるときの確率は 1/100 で、このときの手数は 1 手です。 1 であるときの確率は 1/100 で、このときの手数は 2 手です。 2 であるときの確率は 1/100 で、このときの手数は 3 手です。 3 であるときの確率は 1/100 で、このときの手数は 4 手です。 : 99 であるときの確率は 1/100 で、このときの手数は 100 手です。 つまり、平均手数は により、100 手目の約半分です。 ここでいう解き方をアルゴリズムといい、 問題を解くための手数 (てかず) のことを計

  • 村上・泉田研究室 遺伝的アルゴリズム

    遺伝的アルゴリズムとは、生物の進化の過程を真似て作られたアルゴリズムで、確率的探索(サンプル店を評価しながら探索する方法)、学習、最適化の一手法です。 この遺伝的アルゴリズムの最大の特徴としては、解空間構造が不明であり、決定的な優れた解法が発見されておらず、また、全探索が不可能と考えられるほど広大な解空間を持つ問題に有効であることが挙げられます。 その遺伝的アルゴリズムの基を構成している重要な処理プロセスは、以下の3つになります。 ●選択 (selection) ●交叉 (crossover) ●突然変異 (mutation) そして、これらを繰り返し行うことで、人工的な進化を行い、最適解を発見していくのです。 このページでは、遺伝的アルゴリズムが一体どのようなものなのか、そして実際どのように使うのかについて、ご紹介していきます。