« 日記 |Main| 日記 »

« rpc用インターフェイス | log | log »

グラフ可視化ソフトGRINEditを使ったCollatz角谷問題の可視化その2

Blog/2006-7-17 - Rocco の日記。前回のGRINEditで可視化したFLASH(これ)は一気に全部を実行していたので、慣れない人にはわかりにくかったようです。そこでステップ実行のバージョンを作ってみました。PythonとXML-RPCとグラフ可視化ソフトGRINEditを使ったCollatz角谷問題の可視化

こうやって「うねうねつながったもの」がリアルワールドにあったとして、「頂点1から一番離れている頂点はどれ?」と聞かれたなら、1を持ってぶら下げて一番下にたれ下がるのがどれか見てみたくなりますよね。でも、無重力だとたれ下がってくれません。そこで重力を追加したわけです。

こうやって可視化することに意味があるのか、と問われるなら「ない」と答えるでしょうねぇ…。あえて言うなら「面白いから」でしょうか。まぁ、「キミならどう書く 2.0」の参加者は、面白いから解いているんであって、意味があるから解いているわけではないと思います。賛否両論あるみたいですけど、お祭りは楽しんだ方がいいのではないかと。

なおときどきの雑記帖 リターンズの「ソートのアルゴリズムの違いによる挙動の差とか、 木構造の構築、とくにAVL-treeとかの回転(rotate)なんかはこういう風に視覚化できると わかりやすいんじゃなかろうか? 」とのご指摘はもっともです。 それを目指してNarVisualizerを作り、去年の夏のプログラミングシンポジウムで発表したのですが、これ自体よりもこれの整形エンジンの方が需要が高そうだったのでこっちは塩漬けにしてGRINEditをやっています。将来的にはGRINEditの応用例としてNarVisualizerを吸収併合する予定です。

# -*- coding: cp932 -*-
import xmlrpclib
server = xmlrpclib.Server("http://localhost:8080/RPC2")
g = server.grinedit

g.initGraph()

existVertex = {
    1: g.addVertex("BoxVertex",
                   {"label": "1", "anchored": (0.0, 0.0)})
}

def addVertex(x):
    if not(x in existVertex):
        name = g.addVertex("BoxVertex", {"label": str(x)})
        existVertex[x] = name

    return existVertex[x]

def collatz(x):
    raw_input("...")
    # 次の数を求める
    if x % 2:
        y = x * 3 + 1
    else:
        y = x / 2

    print x, "の次は", y, "です"
    toReturn = y in existVertex
    v1 = addVertex(x)
    v2 = addVertex(y)
    g.addEdge("LinearEdge", {"v1": v1, "v2": v2, "directed": True})

    if toReturn:
        print y, "はすでに計算済みなので計算を中断します"
        return
    collatz(y)
        
for i in range(2, 11):
    if i in existVertex:
        print i, "はすでに計算済みなのでスキップします"
        continue
    print i, "についての計算を始めます"
    collatz(i)
    raw_input("...")

#g.addLaw("PL_Gravity", {})

トラックバック(Trackback)

Trackback URL: http://www.nishiohirokazu.org/mt/mt-tb.cgi/204

フィードバック

by Rocco | 2006年07月26日 00:14

解の可視化というのであれば、前回の重力版が確かに分かりやすいのですが、どういう順序で計算されているか (アルゴリズム) という意味では今回のものが非常に分かりやすいです。 次の数の時のポコッ感が面白いです。興味も出るし、見ていると引き込まれますね。

ご意見・ご感想をお送りください(フィードバック)

(フィードバックはメールで送信され、基本的に表示されませんが、内容によっては公開させていただくこともございます。ご了承ください。Your comment doesn't appear the page immediately. If the comment has value to other people, it will be put on the page or subsequent entries. Thank you.)

上の情報は、いずれも未記入でかまいません。 All of above questions are optional.