FreeBASIC 連想配列(Ultimate FB HashMap)
目次→フォーラム→FreeBASIC→補足→Ultimate FB HashMap←オリジナル・サイト
このページは、Zamaster さんが、掲示板に投稿された「The Ultimate FB HashMap」を日本語化して紹介するものです。
この HashMap テーブルは極めて適切にスケーリングされます。1項目でも、100万項目追加した状態でも、挿入/削除/検索の時間は同じです。
(inline-asm を使っています。)
注意1:プログラムのパスやファイル名に日本語は使えません。半角英数のみで使います。
注意2:Win64 では使えないので、Win32 で使います。
Win64 でも使える連想配列(GLib Hash Table)が有ります。
注意3:FreeBASIC 1.05 だと使える連想配列に、Dictionary Class があります。
ライブラリとして提供されているコードを使う手順は簡単です。
- 'hashmap2.bi' ヘッダファイルを FreeBasic 登録フォルダのインクルードフォルダ(通常は/incフォルダ)にコピーします。
もしくは、コンパイルするソース・プログラムと同じフォルダに登録します。
ディクショナリを使うには、下記事例の、★1、★2、★3、★4、を含める必要があります。
#include once "hashmap2.bi"
1.ランダムな文字列でパフォーマンスを検証
2.キー生成での干渉の有無チェック
3.品目マスタと品目オーダを照合
4.英文字の出現頻度を数える
ランダムな文字列でパフォーマンスを検証
ランダムな文字列を生成して、HashMap の使い方とパフォーマンスの確認を行う事例です。
mainJP.bas
キー生成での干渉の有無チェック
HashMap で生成するキーの衝突 (collision) を検証するプログラムです。
UsageTest3JP.bas
品目マスタと品目オーダを照合
品目マスタ(15,000件)と品目オーダ(50,000件)を照合して、品目別の受注数量・金額・重量を集計する事例です。
私のパソコン環境で、1秒以下で処理が完了しました。
(このプログラムは、Excelマクロで作成して利用していたものを FreeBASIC に移植したものです。)
サンプルデータを作成するための地域ファイル
region.txt
サンプルデータ(品目マスタと品目オーダ)を作成するプログラム
PrepareTestData00Jp.bas
OrderSorting07JpUdt.bas
英文字の出現頻度を数える
次の使用例は、英文のテキスト・ファイル中の文字と出現頻度を調べるものです。
探偵小説 シャーロック・ホームズシリーズの「踊る人形」 では、換字暗号が使われています。
小説の中で、シャーロック・ホームズ は、英文中の文字の出現頻度から、「踊る人形」の暗号を解読します。
「踊る人形」の解読方法
http://www.comm.tcu.ac.jp/~math/hnakai/infomath/sherlockholmes/dance_decording.html
頻度分析 (暗号)
https://ja.wikipedia.org/wiki/%E9%A0%BB%E5%BA%A6%E5%88%86%E6%9E%90_(%E6%9A%97%E5%8F%B7)

TheAdventureOfTheDancingMen.txt ←文字列抽出に使ったファイル
CountTheNoOfOccurrencesOfCharacters2win9.bas
hashmap2.bi
FreeBASIC の仕様変更に合わせて、「bool」 を「__bool」に変更して、hashmap.bi → hashmap2.bi としています。
paul doe さんと、MrSwiss さんに教えていただきました。
ページ歴史:2018-05-23
日本語翻訳:WATANABE Makoto、原文著作者:Zamaster
