学校の課題でVisualStudioで実現できるハフマン符号化プログラム(3次拡大)を作成せよ。という課題が出題されました。
しかし私は今まで入門程度のプログラミングしかやったことがなく、。指定されたファイルの文字数を調べる程度の事しかできない程度のプログラミングの知識なのでさっぱりです。
指定されたtxtファイルを読み込んで、文字数を数えて、文字の種類を調べて、各文字の発生確率を調べて、各文字を3次拡大行列にし、ツリー構造のアルゴリズムを作成し、各値を2進数に変換して、2進数に変換したものをtxtファイルにして保存するということは何となくわかるのですが、それを実現する知識がありません。
プログラミングの知識をお持ちの方のご協力をお願いいたします。
No.1ベストアンサー
- 回答日時:
「ハフマン符号化プログラム(3次拡大)を作成せよ。
」これだと、問題に不備があるとおもう。
入力情報源の符号はビット?バイト?その他?
一文字だとすると、文字コードによっては長さが変動するから、固定長の文字コードじゃないと無理だと思う。
例えば、
扱う文字が限定されているとか、
ファイルで使う文字コードが決まってるとか
なにか他に限定する条件が必要。
この課題を素直に解釈すると、
ファイルの bit ストリームを、3bit ずつ区切るか、
ファイルの byte ストリームを、3byte ずつ区切るか
して「一つの符号」とする。
1) 出現回数をカウントして
2) 二分木を構築する。
3) 構築した二分木から bit 列 → 「一つの符号」の対応テーブルをファイルに出力。
4) 作成した二分木をつかって、入力の「一つの符号」を順番に bit 列に変換しながら、ファイルに出力して、入力の「一つの符号」がなくなるまで繰り返す。
おしまい。
あと、必要な知識は、
二分木
http://ja.wikipedia.org/wiki/%E4%BA%8C%E5%88%86% …
連結リストは、二分木の前提知識
http://ja.wikipedia.org/wiki/%E9%80%A3%E7%B5%90% …
ハフマン符号化の為の、
- 「一つの符号」
- 出現回数
- 左右の子の接点の合計
をノードの属性として含めて、構造体かクラスにする。
クラスにするなら、二分木の操作をクラス関数に含める。
構造体
http://ja.wikipedia.org/wiki/%E6%A7%8B%E9%80%A0% …
クラス
http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%A9% …
ノードのソート
http://ja.wikipedia.org/wiki/%E3%82%BD%E3%83%BC% …
ご回答ありがとうございます。
データの中の文字の種類がABCDの4種類の英字だということを書き忘れていました(-_-;)
ご紹介いただいたサイトで少し勉強してみます(#^.^#)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Eclipseで検索ができなくなった
-
C++.NET 2003 「空のドキュメ...
-
VBAで、JPG写真の撮影日時を読...
-
0バイトのテキストファイル
-
ファイルの排他について
-
画像ファイルに拡張子がjpgのフ...
-
リンク先がjspファイルなのです...
-
【Excel VBA】取り込んだファイ...
-
リソースファイルを認識してく...
-
VBSで、日本語文字列の抽出が、...
-
\\記号が入った数値の処理につ...
-
Javaのファイルダウンロードに...
-
PHPからベーシック認証のかかっ...
-
C++によるファイル送受信プログ...
-
vbaの構文の修正相談(xmlファ...
-
Perl5でFTP一括転送する方法を...
-
includeで別サイトを読み込む
-
【VBA】複数CSVの特定範囲を1つ...
-
CSVファイルの時刻の形式について
-
accessでクエリをExcelにエクス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【Excel VBA】取り込んだファイ...
-
0バイトのテキストファイル
-
VBAで、JPG写真の撮影日時を読...
-
Eclipseで検索ができなくなった
-
サイトマップにサブドメインを...
-
HTMLテキストリンクでExcelファ...
-
ファイル作成日時と更新日時を...
-
msgget()で指定するkey値について
-
ディレクトリのサイズの取得
-
VB2008 iniファイルの全セクシ...
-
【VBA】複数CSVの特定範囲を1つ...
-
CSV名と同じシートを選択して取...
-
main関数のコマンドライン引数...
-
C++.NET 2003 「空のドキュメ...
-
ファイル更新日取得
-
VB6.0のメモリリークについて
-
VBS ファイルマージ処理
-
2GB以上のファイルを扱う方法
-
<input type="file" で初期値...
-
JavaでPDFファイルに変換するに...
おすすめ情報