簡易整列アルゴリズムアニメーションライブラリ:SAL


[Japanese|English]

目次


はじめに

SALは整列アニメーションのためのライブラリです. SALのアニメーションは, アニメーション用の関数を整列アルゴリズムの適切な所に挿入することで実現されます.

SALでは,単にアニメーションを行うだけでなく, 実行時間やデータの交換回数・データの参照回数を表示する事も可能です. また,アニメーションを行わずにこれらの情報だけを表示することも可能です.

ライブラリは,Xlibの機能だけを利用して作成されていますが, 実行時間の測定部分に機種依存があって, どこででも動くというわけではないでしょう. これは,将来的に改善する予定です. 現在の所,

での動作が確認されています. 動作確認できたら連絡してくださると助かります(_o_)


必要なもの


サンプルコードとスクリーンショット

ここでは,単純ソートで,実際にアニメーションを行わせるためのコードを 紹介します.

文中赤字がアニメーションを行うために必要な関数です.

	  #include "anim.h"
	  #define DATA_SIZE       100

	  int data[DATA_SIZE];

	  void swap(i,j) {
	  int tmp;
	  tmp=data[i];  data[i]=data[j];  data[j]=tmp;
	  }

	  int main() {
	  int i,j;

	  /* データの初期化 */
	  srandom((int)time(NULL));
	  AnimInit(DATA_SIZE,VIEW);
	  
	  for(i=0;i<DATA_SIZE;i++) {
	  data[i]=(int)(DATA_SIZE*((double)random()/RAND_MAX));
	  AnimInitData(i,data[i]);
	  }
	  AnimShowData(0);

	  /* 実際のソート */
	  for(i=0;i<(DATA_SIZE-1);i++)
	  for(j=i+1;j<DATA_SIZE;j++) {
	  AnimHilightData(j);
	  if(data[i]>data[j]) {
	  swap(i,j);
	  AnimSwapData(i,j);
	  }
	  AnimUnhilightData(j);
	  }
	  /* 統計情報の出力 */
	  AnimShowStats();
	  }
	
[ScreenShot]
Swap count:     1731
Hilight count:  4950
Sorting time:   1342.9839[sec]
	    
統計情報の出力

ライブラリに用意されている関数

類別関数名機能
初期化関係AnimInit(int dataSize,int viewMode)アニメーションの初期化,viewModeはアニメーションの表示・非表示をVIEW/NoVIEWで指定
AnimInitData(int i,int value)i番目の初期データ値valueの設定
AnimShowData()初期データの表示
アニメーションAnimSwapData(int i,j)データi,jの交換
AnimHilightData(int i)データiの強調表示
AnimUnhilightData(int i)データiの強調表示を止める
パラメータの設定AnimSetWaitTime(int time)待ち時間time(マイクロ秒)の設定
AnimSetView(int value)アニメーション表示モードの変更,アニメーションの表示・非表示をVIEW/NoVIEWで指定
AnimSetAnimation(int value)データ交換時のアニメーションを行うか行わないかを,ANIM/NoANIMで指定
統計情報の出力AnimShowStats()統計情報を主力する

ダウンロード

SALの配布セットには, 以下の整列のサンプルコードが含まれています.

インストール

configureを用意していますので,インストールは以下の手順にしたがってください.

  1. % ./configure
  2. % xmkmf
  3. % make Makefiles
  4. % make

リンク


Takeshi Mutoh <mutoh@info.nara-k.ac.jp>