凪瀬 Blog
Programming SHOT BAR

目次

Blog 利用状況
  • 投稿数 - 260
  • 記事 - 0
  • コメント - 47027
  • トラックバック - 192
ニュース
広告
  • Java開発者募集中
  • 経歴不問
  • 腕に自信のある方
  • 富山市内
  • (株)凪瀬アーキテクツ
アクセサリ
  • あわせて読みたい
凪瀬悠輝(なぎせ ゆうき)
  • Java技術者
  • お茶好き。カクテル好き。
  • 所属は(株)凪瀬アーキテクツ
  • Twitter:@nagise

書庫

日記カテゴリ

 

前回は構想だけだったので、 ちょっとコードを書いてみました。

参考文献はhttp://hp.vector.co.jp/authors/VA007799/viviProg/doc5.htmで、 ViViの作者による解説です。

処理速度と、メモリ効率を考えながらコードを書いたらかなり汚くなってしまいました。
本当はパフォーマンスとか考えずに綺麗にアルゴリズムを実装するほうがよいのかもしれませんね。

コード解説

アルゴリズムのややこしいコードなので、比較的コメントは多めにしてありますが、 後で自分でソースを読んで理解できる自信がありません。
その上、車輪の再発明的なコードなので、正直オススメしません。読むならSubversionのソースでも読むほうがタメになるのではないでしょうか。

とりあえず、参考文献にあるとおり、エディットグラフの最短経路を探す問題となりますが、 ここでは比較的原始的に経路を探すアルゴリズムで書いてみました。
計算量はO(M*N)となるはず(M,Nは比較対象となるデータの数)。 y方向のループとx方向の2重ループによる構成ですから、比較対象となる2つのデータの数の積だけループがまわります。
ただし、経路情報をメモリしているとメモリまでM*Nのオーダーで必要となりますが、 走査する対象列とその1つ手前の列の情報しか持たないようにすることで、2*Mのメモリ量に抑えています。
経路の情報もその長さは最短でも√M*Nになりますから(完全一致の場合)、これにさきの2*Mの長さを掛けると結構な分量になります。
ルートの分岐点のみ経路を保管し、あとは上の交点から下に下りる経路をとった扱いにして、省略しています。
こんなことをするからソースが複雑になるんですよね…。

インターフェース的には

   @param comparator オブジェクトの比較に用いる
   @param opeIte1 縦軸
   @param opeIte2 横軸
   @return 最短経路情報
   */
  public static <T> List<Path> diff(Comparator<T> comparator,
      Iterable<T> opeIte1, Iterable<T> opeIte2) {

となっており、比較のためのComparatorと、比較する二つのデータ型を渡します。
データはIterableで渡していますが、実際問題、Listでいいんじゃないかと作ってから思った次第。 Iterableにしたところで配列も渡せるってわけにはいかないんだもん。

経路の情報は右、右斜め下、下の3種の方向とその長さで、いわゆるランレングス方式で表記しています。
これもどういう型がよいか迷ったんですが、迷うぐらいならプロトタイプを書いてしまえ!ということで、 感性で書いてみました。

できれば先の参考文献にあった、O(NP) アルゴリズムで書き直したいところです。 車輪の再発明は勉強にはいいのですが、経済的ではないのでSubversionからソースもってきて終わりにしてしまうかもしれない。

展望

とりあえず、思ったよりも簡単に比較アルゴリズムは書けたので、 あとはコレにいろいろなデータを突っ込むだけといったところです。
一応、Javac tree APIでの構文解析木の取得がわりと簡単に出来たので、 構文解析木のdiffをとる方向性で考えています。 Visitorパターンで探索することになるんで、ちょっととっつきにくいのですが、まぁなんとかなるでしょう。

投稿日時 : 2007年10月20日 21:23
コメント
  • # re: 比較処理を書いてみた
    かつのり
    Posted @ 2007/10/21 0:31
    表記のブレで差分がでるのが本当に困りますね。
    コードを保存するときには必ず、
    フォーマッタによるフォーマットとメンバーのソートをやってます。

    これだと無意味な空白だけの差分とかはなくなる。
    でもASTベースで比較できると最高ですね。
  • # re: 比較処理を書いてみた
    siokoshou
    Posted @ 2007/10/21 1:38
    C#にO(NP)を移植したことがあります。参考にどうぞ。
    http://d.hatena.ne.jp/siokoshou/searchdiary?word=%2a%5bdiff%5d
  • # re: 比較処理を書いてみた
    凪瀬
    Posted @ 2007/10/21 11:03
    おぉ。ありがたい。
    C#->Java間移植は楽ですからねー。
    Diff部分の実装の参考にさせてもらいます。感謝。

    > AST
    AST比較したあと、ソース上で相違を表現しないといけないところが心配だったりします。
    Viewをどういうスタイルにするといいのでしょうかね?
  • # re: やりたいことリスト
    Out of Memory
    Posted @ 2007/12/10 11:39
    re: やりたいことリスト
  • # kCfNnafgVSBHFc
    http://crorkz.com/
    Posted @ 2014/08/04 4:26
    FBrrjF Appreciate you sharing, great blog.Much thanks again. Awesome.
  • # OzWFdeGGVZXUlCSVkfT
    http://crorkz.com/
    Posted @ 2014/08/05 6:03
    mFwvsl Very informative article post.Much thanks again. Keep writing.
  • # IrwlzIzYMwNBVxpAOY
    http://cs-pmr.ru/user/Weelsopsys2e/
    Posted @ 2014/08/29 18:21
    Hey, thanks for the article.Much thanks again.
  • # KhpxcQVuAqreV
    http://500views.com
    Posted @ 2014/09/09 17:44
    Good day! I simply would like to give a huge thumbs up for the good information you've got right here on this post. I shall be coming back to your weblog for more soon.
  • # KnLvmbxhNunQT
    http://www.arrasproperties.com/category/properties
    Posted @ 2014/09/09 19:26
    F*ckin' awesome things here. I am very satisfied to peer your post. Thanks so much and i am taking a look forward to contact you. Will you kindly drop me a e-mail?
  • # SEjdTJJRSQP
    http://www.nobisca.com
    Posted @ 2014/09/10 19:17
    I keep listening to the reports talk about getting boundless online grant applications so I have been looking around for the best site to get one. Could you advise me please, where could i get some?
  • # BVifbMLxlGIod
    https://www.suba.me/
    Posted @ 2018/12/20 4:14
    42Xg7f This is a topic that is near to my heart Many thanks! Exactly where are your contact details though?
  • # That is a good tip particularly to those fresh to the blogosphere. Brief but very precise information… Many thanks for sharing this one. A must read article!
    That is a good tip particularly to those fresh to
    Posted @ 2019/04/16 0:15
    That is a good tip particularly to those fresh to
    the blogosphere. Brief but very precise information… Many thanks
    for sharing this one. A must read article!
  • # Heya i'm for the first time here. I found this board and I find It really useful & it helped me out a lot. I hope to give something back and aid others like you helped me.
    Heya i'm for the first time here. I found this boa
    Posted @ 2019/07/30 17:38
    Heya i'm for the first time here. I found this
    board and I find It really useful & it helped me out
    a lot. I hope to give something back and aid others like you helped me.
  • # Heya i'm for the first time here. I found this board and I find It really useful & it helped me out a lot. I hope to give something back and aid others like you helped me.
    Heya i'm for the first time here. I found this boa
    Posted @ 2019/07/30 17:39
    Heya i'm for the first time here. I found this
    board and I find It really useful & it helped me out
    a lot. I hope to give something back and aid others like you helped me.
  • # Heya i'm for the first time here. I found this board and I find It really useful & it helped me out a lot. I hope to give something back and aid others like you helped me.
    Heya i'm for the first time here. I found this boa
    Posted @ 2019/07/30 17:40
    Heya i'm for the first time here. I found this
    board and I find It really useful & it helped me out
    a lot. I hope to give something back and aid others like you helped me.
  • # Heya i'm for the first time here. I found this board and I find It really useful & it helped me out a lot. I hope to give something back and aid others like you helped me.
    Heya i'm for the first time here. I found this boa
    Posted @ 2019/07/30 17:41
    Heya i'm for the first time here. I found this
    board and I find It really useful & it helped me out
    a lot. I hope to give something back and aid others like you helped me.
  • # Hey There. I discovered your weblog the usage of msn. This is a very well written article. I'll make sure to bookmark it and come back to learn extra of your useful information. Thanks for the post. I'll definitely comeback.
    Hey There. I discovered your weblog the usage of m
    Posted @ 2019/08/01 5:05
    Hey There. I discovered your weblog the usage of msn. This is a very well
    written article. I'll make sure to bookmark it and come
    back to learn extra of your useful information. Thanks for the
    post. I'll definitely comeback.
  • # I for all time emailed this webpage post page to all my associates, as if like to read it after that my links will too.
    I for all time emailed this webpage post page to a
    Posted @ 2019/08/14 20:31
    I for all time emailed this webpage post page to all my associates, as if
    like to read it after that my links will too.
  • # I for all time emailed this webpage post page to all my associates, as if like to read it after that my links will too.
    I for all time emailed this webpage post page to a
    Posted @ 2019/08/14 20:32
    I for all time emailed this webpage post page to all my associates, as if
    like to read it after that my links will too.
  • # I for all time emailed this webpage post page to all my associates, as if like to read it after that my links will too.
    I for all time emailed this webpage post page to a
    Posted @ 2019/08/14 20:33
    I for all time emailed this webpage post page to all my associates, as if
    like to read it after that my links will too.
  • # I for all time emailed this webpage post page to all my associates, as if like to read it after that my links will too.
    I for all time emailed this webpage post page to a
    Posted @ 2019/08/14 20:34
    I for all time emailed this webpage post page to all my associates, as if
    like to read it after that my links will too.
タイトル
名前
Url
コメント