{ "cells": [ { "cell_type": "markdown", "metadata": { "toc": "true" }, "source": [ "# Table of Contents\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Implementing BFS" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "まず準備として、始点と終点が指定されたときに始点から終点に至るパスのうちの一つを求めるアルゴリズムを実装したい。「Breadth First Search(BFS, 幅優先探索)やDFS(Depth First Search)を用いて実装できる」とレクチャーノートに書いてあるので、試しにBFSを用いて実装してみる。\n", "\n", "BFSの実装にはQueueというデータ構造を用いる。(cf: DFSではstackを用いる。)Pythonでは、dequeというデータ構造(stackとqueueを合わせたようなデータ構造)が提供されているので、それを用いる。\n", "\n", "[このページ](http://www.ocw.titech.ac.jp/index.php?module=General&action=DownLoad&file=201602093-9183-1-11.pdf&type=cal&JWC=201602093)も参考になりそう。\n", "\n", "実装に当たって、NetworkXというpythonのグラフライブラリを利用している。詳しい使い方は[公式サイトのチュートリアル](http://networkx.readthedocs.io/en/networkx-1.11/tutorial/)等が参考になる。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ ">Given a graph $G$ and a starting vertex $s$, a breadth first search proceeds by exploring edges in the graph to find all the vertices in $G$ for which there is a path from $s$. The remarkable thing about a breadth first search is that it finds all the vertices that are a distance $k$ from ss before it finds any vertices that are a distance $k+1$. (http://interactivepython.org/runestone/static/pythonds/Graphs/ImplementingBreadthFirstSearch.html)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# dequeをimport\n", "from collections import deque" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "code_folding": [ 0 ], "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "deque([1, 2, 3, 4, 5])\n", "deque([1, 2, 3, 4, 5, 0])\n", "0\n", "deque([1, 2, 3, 4, 5])\n", "1\n", "deque([2, 3, 4, 5])\n" ] } ], "source": [ "# dequeのメソッドの確認\n", "\n", "d = deque([1,2,3,4,5])\n", "print (d)\n", "\n", "# append: push/enqueueに対応\n", "d.append(0)\n", "print (d)\n", "\n", "# pop: 右の要素を削除し、返す\n", "print (d.pop())\n", "print (d)\n", "\n", "# popleft: 一番左の要素を削除し、返す\n", "print (d.popleft())\n", "print (d)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# NetworkXをインポート\n", "import networkx as nx\n", "\n", "G = nx.DiGraph()\n", "\n", "G.add_edges_from([(1,2),(1,3),(1,4),(2,4),(2,5),(3,4),(4,5)])" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "code_folding": [ 0 ], "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "