赤黒木の検証

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

赤黒木の検証

#1

投稿記事 by みけCAT » 11年前

gcc4.7.0をDev-C++4.9.9.2で使っています。
主に以下の2サイトを参考に、赤黒木を実装しています。
http://www.geocities.jp/h2fujimura/mutt ... -tree.html
http://www.ece.uc.edu/~franco/C321/html ... black.html
一応うまくいっていそうなのですが、
1.このコードは本当に正しいでしょうか?
2.どうやって検証するのがいいでしょうか?
よろしくお願いします。
► スポイラーを表示
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 赤黒木の検証

#2

投稿記事 by みけCAT » 11年前

身勝手ですいません。
AVL木についても同様の質問をさせてください。
► スポイラーを表示
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

たいちう
記事: 418
登録日時: 13年前

Re: 赤黒木の検証

#3

投稿記事 by たいちう » 11年前

どこまで真面目に検証するかにもよりますが、
手始めにツリー構造を表示できるようにしてはどうでしょうか。
DxLibでもWinAPIでも構わないので、正しいかどうかを一目で判断できるようにします。
私ならばきっとCUIで作ります。
適当な乱数列で赤黒木が構成されていく様子をステップ毎に確認できれば十分かと。

もっと真面目にやるならば、CppUnitなどの単体テストを作り、
カバレッジ100%を目指しましょう。
私が作るとしたら最初からテスト駆動式に開発します。
CUIでの表示は、表示メソッドのテストが作りやすいというメリットもあります。


繰り返しになりますし、実装済みかもしれませんが、
視覚化が開発・検証の最優先事項です。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 赤黒木の検証

#4

投稿記事 by みけCAT » 11年前

回答ありがとうございます。
たいちう さんが書きました:どこまで真面目に検証するかにもよりますが、
手始めにツリー構造を表示できるようにしてはどうでしょうか。
DxLibでもWinAPIでも構わないので、正しいかどうかを一目で判断できるようにします。
私ならばきっとCUIで作ります。
適当な乱数列で赤黒木が構成されていく様子をステップ毎に確認できれば十分かと。
ごめんなさい。表示ソフトは既に作ってあります。
添付しました。
UIは共通で、F1で操作説明を表示します。あとはそれを見てください。
0~999の整数をキーとして挿入できます。
たいちう さんが書きました:もっと真面目にやるならば、CppUnitなどの単体テストを作り、
カバレッジ100%を目指しましょう。
私が作るとしたら最初からテスト駆動式に開発します。
CUIでの表示は、表示メソッドのテストが作りやすいというメリットもあります。
もう少し詳しくお願いします。
添付ファイル
tree_demo.zip
赤黒木とAVL木の表示ソフトです
(167.41 KiB) ダウンロード数: 86 回
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

たいちう
記事: 418
登録日時: 13年前

Re: 赤黒木の検証

#5

投稿記事 by たいちう » 11年前

> もう少し詳しくお願いします。

キーワードでググったりした後という前提で少し回答します。

カバレッジはC0です。
フリーで見つけることができたツールが、C0まででしたので。
最近探してないですので、今はもっと良いツールが見つかるかも。

設計の悪いプログラムにxUnit用のテストを書こうとしても、
不可能に近い場合が多く、テストを書くためには先にリファクタリングが必要、
安全にリファクタリングをするためには先にテストが必要、というジレンマに陥ります。
これには何度も苦労させられているので、趣味である程度以上の規模のプログラムを作る時は、
殆ど必ずテスト駆動で作ります。カバレッジを測ることは少ないですが。


判らない点があれば、もう少しピンポイントで尋ねてくれた方が答えやすいです。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 赤黒木の検証

#6

投稿記事 by みけCAT » 11年前

CppUnitを使用しようとしたのですが、よくわかりませんでした。
まずhttp://www.ogis-ri.co.jp/otc/hiroba/technical/CppUnit/
を参考にしようとしましたが、古そうなので、
http://sourceforge.net/apps/mediawiki/c ... =Main_Page
からCppUnit 1.12.1をダウンロードし、MSYSで./configureしてからmakeしました。
exsamples/simpleを参考に、
Dev-C++のプロジェクトの形でコンパイルできたら便利なので試してみたのですが、

コード:

4 F:\C\cppUnitTest\TestTest.cpp invalid declarator before 'autoRegisterRegistry__4' 
というエラーが出てしまいました。
何か足りないのでしょうか?それともプロジェクトを使用することはできないのでしょうか?
よろしくお願いします。
使用したプロジェクトを添付します。
添付ファイル
cppUnitTest.zip
プロジェクトです。
(4.34 KiB) ダウンロード数: 79 回
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

たいちう
記事: 418
登録日時: 13年前

Re: 赤黒木の検証

#7

投稿記事 by たいちう » 11年前

ogis-riのCppUnitは同名の別のソフトです。
同じ目的のプログラムですが、マクロの定義が違っていたり、
使い方は結構違っていたと思います。

私が使っているのはsourceforgeのcppunit-1.12.1です。
ただ、これも相当古いみたいで、VC++6.0用のプロジェクトだったと思います。
もっと使いやすい物が出ていないんでしょうかね?

MSYSの事は判りませんが、freeのVisual Studio 2008 Express Editionからの
使い方ならば、ある程度は説明できます。多分2010でも大差ないでしょう。

example.dswは古いファイルですので、2008から開こうとすると、
プロジェクトの変換が行われると思います。
その後、ソリューションをビルドしようとしても、全てはビルドできません。
GUIの部分はMFCを使っているため、freeのExpress Editionではビルドできないのです。

それでもCUIの部分は十分使えますので、
simple.exeを参考にテストを書くことができます。

別のアプローチとして、『テスト駆動開発入門』
という本に、xUnitの作り方、というのが載っています。
本に書かれているのはpythonの例ですが、それを参考にC++で作ることも可能です。
何年か前に作ったことがあるので、このアプローチで行き詰ったら聞いてください。


# 前世紀の話ですが、プロになりかけの頃リファクタリングとxUnitの存在を知り、
# これは素晴らしいものだ、と思いながらも設定が難しく使えなかったのも良い思い出です。
# 今ならば当時ほどは難しくないし、素晴らしいという評価も変わりません。
# つまり、お勧めなので、この機会に是非一度使ってみて下さい。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 赤黒木の検証

#8

投稿記事 by みけCAT » 11年前

たいちう さんが書きました:ogis-riのCppUnitは同名の別のソフトです。
同じ目的のプログラムですが、マクロの定義が違っていたり、
使い方は結構違っていたと思います。

私が使っているのはsourceforgeのcppunit-1.12.1です。
CppUnit 1.12.1をダウンロードしたって言いましたよね?
たいちう さんが書きました:MSYSの事は判りませんが、freeのVisual Studio 2008 Express Editionからの
使い方ならば、ある程度は説明できます。多分2010でも大差ないでしょう。
できればMSYSではなくDev-C++でお願いします。
バージョンアップして5.2.0.3になりました。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 赤黒木の検証

#9

投稿記事 by みけCAT » 11年前

エラーの原因は、TestTest.hのクラス定義の最後にセミコロンを忘れたことでした。
お騒がせしました。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

たいちう
記事: 418
登録日時: 13年前

Re: 赤黒木の検証

#10

投稿記事 by たいちう » 11年前

> CppUnit 1.12.1をダウンロードしたって言いましたよね?

誤解させてしまったようですが、みけCATさんがDLした
バージョンは昨夜も把握していましたよ。
それが数年前に私のDLしたものと同じだと書いたのです。


> できればMSYSではなくDev-C++でお願いします。
> バージョンアップして5.2.0.3になりました。

これについては私はお手伝いできません。
幸い解決したみたいですが。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 赤黒木の検証

#11

投稿記事 by みけCAT » 11年前

すいません。
しばらく放置してしまったので解決にし、
気がむいたらまた考えることにします。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

“C言語何でも質問掲示板” へ戻る