ページ 1 / 1
ソートアルゴリズムの可視化
Posted: 2014年1月18日(土) 21:52
by kopi
こんばんは。
今日、下のような動画を発見しました。
[nico]
http://www.nicovideo.jp/watch/sm20076984[/nico]
このようなソートアルゴリズムを可視化するプログラムを書いてみたい、と思ったのですが、
どのような環境が必要でしょうか?開発言語としてはC言語がいいです。
今現在、C言語プログラムを書くときの環境は
OS : windows 7 64bit
コンパイラ : bcc5.5.1
となっています。
Re: ソートアルゴリズムの可視化
Posted: 2014年1月18日(土) 21:57
by みけCAT
C言語でWin32 APIを使えば表示はできると思います。
動画にするなら、C言語+libpngで画像を書き出し、ffmpegでつなげて動画にするという方法があります。
Re: ソートアルゴリズムの可視化
Posted: 2014年1月19日(日) 01:55
by kopi
みけCAT さんが書きました:C言語でWin32 APIを使えば表示はできると思います。
動画にするなら、C言語+libpngで画像を書き出し、ffmpegでつなげて動画にするという方法があります。
みけCATさん、情報ありがとうございます。
一応、ネットで調べてみたんですが
http://www.kumei.ne.jp/c_lang/sdk/sdk_23.htm
http://okwave.jp/qa/q7796780.html
このくらいしか出て来ず。
もっとこういうのから勉強すればいいよって分かるサイトなど教えていただけないでしょうか。
簡単なバブルソートからでも実現しようと思ったんですが、画面に描画してアニメーションにする方法が教えていただいた方法では未熟な私ではかなり曖昧にしか分からないので、方向性を教えていただきたいです。
Re: ソートアルゴリズムの可視化
Posted: 2014年1月19日(日) 02:25
by かなたん
私はWin32 APIをまともに触った経験がありませんが、MFC(C++)というのを使ってバブルソートやクイックソートなどを可視化した経験があったので、その動きについて少し書いてみます。
可視化する=動きを画面に出す
ということで、まずは数字の流れを把握する必要があります。
また、ソートの過程を見せるためには、たとえばソートと描画を交互に行う必要があります。
ただ交互に行うだけでは処理が速すぎて人の目には何をやっているのかが分からないので、少なくとも描画の間隔は人がきちんと見れるくらい開けておかなくてはなりません。
そのためにはタイマー処理をする必要があります。
つまり、ちょっとソート→その時の数列を何かしらの表現方法で画面に描画→少し待つ→ちょっとソート→その時の数列を何かしらの表現方法で画面に描画→少し待つ→という感じで繰り返してやれば、ソートアルゴリズムを可視化させることができます。
Re: ソートアルゴリズムの可視化
Posted: 2014年1月19日(日) 13:47
by softya(ソフト屋)
リンクで貼られた最初の猫WinはWin32APIの勉強サイトなので、そこで勉強できます。サイトとの相性は有るでしょうけど。
「Windows SDK編INDEX」
http://www.kumei.ne.jp/c_lang/index_sdk.html
ただ、Win32APIは覚えることが多く大変なのでDXライブラリでやってみるのも方法ですよ。
【追記】
こんなライブラリもあります。
「三輪空司研究室 群馬大学理工学研究院電子情報部門 」
http://www.el.gunma-u.ac.jp/~miwalab/mlib.html
Re: ソートアルゴリズムの可視化
Posted: 2014年1月19日(日) 14:38
by Dixq (管理人)
クイックソートを可視化して分かりやすく教えるソフトを作ったことがあります。
http://dixq.net/sort.html
使っているライブラリはうちで紹介しているDXライブラリです。
http://dixq.net/g/
Re: ソートアルゴリズムの可視化
Posted: 2014年1月19日(日) 17:18
by kopi
かなたん さんが書きました:可視化する=動きを画面に出す
ということで、まずは数字の流れを把握する必要があります。
また、ソートの過程を見せるためには、たとえばソートと描画を交互に行う必要があります。
ただ交互に行うだけでは処理が速すぎて人の目には何をやっているのかが分からないので、少なくとも描画の間隔は人がきちんと見れるくらい開けておかなくてはなりません。
そのためにはタイマー処理をする必要があります。
つまり、ちょっとソート→その時の数列を何かしらの表現方法で画面に描画→少し待つ→ちょっとソート→その時の数列を何かしらの表現方法で画面に描画→少し待つ→という感じで繰り返してやれば、ソートアルゴリズムを可視化させることができます。
方針としてまさに望んでいた回答でした。ありがとうございます。
DXライブラリで行っている方向でいこうと思います。
追記していただいたリンク先も見てみました。こんなライブラリもあるのかーと感心してしまいました。
管理人さんのソフトをダウンロードして見てみました。
やっぱり可視化すると分かりやすい上に、再帰関数の説明が分かりやすかったです。
DXライブラリをまだ使ってみたことがないため、まずは管理人さんのサイトでDXライブラリについて知識を深めていきます。
方針がまとまったので、ここでひとまず解決とさせていただきます。
回答していただいたみけCATさん、かなたんさん、softya(ソフト屋)さん、管理人さん、ありがとうございました。