第1話 超高速スクリプト

--------------------- 第1話 超高速スクリプト --------------------------

はじまり、はじまり~。


<どんなけ速いんでしょうね~~1万倍以上ってのは嘘だと思うけど>
16万倍。

<アハハ!冗談にもほどがありますね。16倍の間違いですね。>
論より証拠。まずはオリジナルをポチットな。

<Liners様コレいつ終わるんですか?>
ちょい待ち!カップラーメン作るから。おっと出来た。164秒か。
では、Liners版をポチットな。

<一瞬でしたね。って0秒って何なのよ!0秒って!>
計測値以下だね。1000回ループにしてみるよ。・・・1022ミリ秒

<ミリ秒って、いきなし単位が激しく違くない?>
まあ。こんなもんでしょ。ちなみにデータが5000件だと186万・・・

<あ~~分かりました。それ以上言わんでよろし!>
<何なのいったい?いきなり10万倍とか100万倍とか桁違いなんてモンじゃないじゃない!>
<心臓に悪いわね。バクバクしてるわ。>
心筋梗塞スクリプト。人呼んで殺人スクリプト。

<冗談に聞こえないわ。・・コレってヤラセじゃないですよね?>
この天使、だいぶ世間に毒されてるな。 マジですよ。
だいたい164秒ってのは質問者の実測値だから。

<いったいどうなってるの?>
さあ?
<本人が知らん訳ないでしょ!!>
ちょっと変わったバイナリサーチと言うのを使っている。

<バイナみんサーチ?>
なに言ってんの。

<かみまみた。 もとい、噛みました。>
ワザとだな。

検索の中でも高速な部類で、ソートされた配列を2分割して大小比較を繰り返すやり方だ。
うまく使うと今回のように効果は絶大だ。

<そ~なんだ。(いいぞいいぞ。報告すれば点数大幅アップの予感♪)>
そ~なんです。

<でもタイトルに「もう一つのバイナリサーチ」ってあったけど?>
そこがミソだね。今回は、ここまで!

<えぇ~~~。>
<それにしても、第1話から16万倍速の超高速スクリプト?コレって現実よね?>
<いやいや5000件のデータなんてザラよね。それなら186万倍速ってなんなのコイツうっ~!>

<私もスクリプトをかじった時に、アルゴリズムを工夫すると速くなると聞いたが、ソレを>
<地で行ってる。しかも予想を遥かに超えて・・・>

<スクリプト物語って完全にネタ切れだと思ったら、この隠し玉でしょ?>
<どんなけ、持ってんよアイツわぁ!>


----------------------------------------------------------------------

提供は: 100万倍速あたりまえ!。Linersでした。

----------------------------------------------------------------------
以下実際の掲示板(オリジナルスクリプト抜粋)

 御礼:参照ファイルのexe化 yudonko  
 
 いりやさん、Linersさんありがとうございます。出来ました。
書き換えというより新規に近くなりましたが、お教えを超簡単に解釈してデータはcall文で呼び出しました。本当の意味のお教えは、今からよく勉強します。
ベトナム市場は、年中新規上場や市場変更があるので、それだけでも更新が楽になります。
Linersさんのおっしゃるように、fgetで楽をしていたので書き換えは結構大変でした。お恥かしいのですが、別途投稿します。
掲示板のルールがわからないので、すみません。いつでも削除できるようにしておきます。
DATE:2009/9/20(Sun) 13:37  
 
 御礼2:参照ファイルのexe化 yudonko  
 
 call vn銘柄名20090527.uws
入力処理
検索分類

検索開始(tabは削除しました)
select a
case 1//数値検索
for z=1 to 3000
//hit行の前の改行文字位置
hk1=pos(chr(13),vn銘柄辞書,z)
//hit行以後すべて
p=copy(vn銘柄辞書,hk1+1)
検査数字=copy(p,1,pos(",",p)-1)

ifb val(検索文字)<=val(検査数字) then
//次行の当社コードを検索文字にする
n検索文字=copy(p,pos(",",p,8)+1,pos(",",p,9)-pos(",",p,8)-1)
break
endif
next
case 2//ティッカー
//hit行の前の改行文字位置
hk1=pos(chr(13),copy(vn銘柄辞書,1,pos(","+検索文字+",",vn銘柄辞書)),-1)
//hit行以後すべて
p=copy(vn銘柄辞書,hk1+1)
//次行の当社コードを検索文字にする
n検索文字=copy(p,pos(",",p,8)+1,pos(",",p,9)-pos(",",p,8)-1)

case 3//当社コード
//hit行の前の改行文字位置
hk1=pos(chr(13),copy(vn銘柄辞書,1,pos(","+検索文字+",",vn銘柄辞書)),-1)
//hit行以後すべて
p=copy(vn銘柄辞書,hk1+1)
//次行の当社コードを検索文字にする
n検索文字=copy(p,pos(",",p,8)+1,pos(",",p,9)-pos(",",p,8)-1)

case 5//業種
//hit行の前の改行文字位置
hk1=pos(chr(13),copy(vn銘柄辞書,1,pos(","+検索文字+",",vn銘柄辞書,回数)),-1)
回数=回数+1
//hit行以後すべて
p=copy(vn銘柄辞書,hk1+1)
//次の検索文字
n検索文字="/"

DEFAULT
//hit行の前の改行文字位置
hk1=pos(chr(13),copy(vn銘柄辞書,1,pos(検索文字,vn銘柄辞書,回数)),-1)
回数=回数+1
//hit行以後すべて
p=copy(vn銘柄辞書,hk1+1)
//次の検索文字
n検索文字=検索文字

selend

//************************* hit行の記述 ***************************

行内容=copy(p,1,pos(chr(13),p))
mcode=copy(行内容,1,pos(",",行内容)-1)
tcode=copy(行内容,pos(",",行内容,1)+1,pos(",",行内容,2)-pos(",",行内容,1)-1)
icode=copy(行内容,pos(",",行内容,2)+1,pos(",",行内容,3)-pos(",",行内容,2)-1)
name=copy(行内容,pos(",",行内容,3)+1,pos(",",行内容,4)-pos(",",行内容,3)-1)
gyousyu=copy(行内容,pos(",",行内容,4)+1,pos(",",行内容,5)-pos(",",行内容,4)-1)
sijou=copy(行内容,pos(",",行内容,5)+1,pos(",",行内容,6)-pos(",",行内容,5)-1)
eiji=copy(行内容,pos(",",行内容,6)+1)

ifb icode<>"" then
前回結果=前回結果+icode+" "+tcode+" "+name+" "+" "+gyousyu+" "_
+sijou+chr(13)+" "+eiji
sendstr(0,"("+tcode+")"+icode+name)//レポート作成時用に
else
msgbox(検索文字+":検索終了!"+(回数-2),BTN_OK,G_SCREEN_W -430,0,BTN_OK)
回数=1
endif
next

******* 以後はvn銘柄名20090527.uwsです。(実際には2000件あるらしい)*******
TEXTBLOCK vn銘柄辞書

10,ABT,v0010,ベンチェー水産㈱ ,食料品,v3ホーチミン,Bentre Aqua Prod
140,BPC,v0140,ビムソン・パッキング㈱ ,梱包・包装,v3ホーチミン,Bim Son Packing
220,CYC,v0220,チャンイー・セラミック㈱ ,建材,v3ホーチミン,Chang Yih Cerami
230,DCC,v0230,デスコン工業建設㈱ ,建設,v3ホーチミン,Descon Construct
ENDTEXTBLOCK