2006-12-01から1ヶ月間の記事一覧

フローチャートを描く(1)

冬休みの宿題で、フローチャートを自動で描くことを目指す。 ひし形の大きさ 判断を示すひし形の大きさはどのように決めればよいだろう。 中に書く文字列を長方形で表し、その大きさを、 幅をw、高さをhとする。 そのときの、ひし形の幅Wと高さHを求める。 …

共和

走行距離 20.24km 実時間 2時間5分10秒 走行時間 1時間59分13秒 平均速度 10.19km/h 〜惣作〜共和の跨線橋〜平成大橋〜 というルート。 風が強くて大変だった。

JScriptのメソッドの速度/test(1)

正規表現を使った文字列の検索が、 indexOfと比べて速度がどの程度なのか調べた。 以前と同様に調べた。 http://d.hatena.ne.jp/inamori/20061219正規表現は、いったん var reg = /b/;などとしてから使うと indexOfを使うのとそれほど速度が変わらなくなる。…

JScriptのメソッドの速度/split

長さ100の文字列をカンマで結合した文字列を、 カンマでsplitしてn要素のArrayを作る。 これを10万/n回繰り返す。だいたいArrayの1要素あたり3μsかかっているので、 ほとんどArrayを作る時間になっている。 自作のコードはこちら。 String.prototype.split2 …

JScriptのメソッドの速度/indexOf

長さnで末尾だけが'b'の文字列を用意する。 この文字列を最初から'b'を検索する。 これを10万回繰り返す。 この実行時間の10回平均を出す。きれいに線形になる。 1文字を比較して進むのに、16ns程度かかるということか。

渡橋

走行距離 15.57km 実時間 1時間35分45秒 走行時間 1時間28分24秒 平均時速 10.6km/h 久しぶりに長い距離走った。 足首が疲れた。

東京

刈谷 5:45 〜 5:51 知立 三河線 知立 5:55 〜 6:34 豊橋 名鉄名古屋本線 豊橋 6:42 〜 6:56 浜松 ひかり430号 浜松 7:11 〜 9:26 沼津 沼津 9:33 〜 9:53 熱海 熱海 10:00 〜 11:32 品川 品川 11:35 〜 11:40 浜松町 山手線 浜松町 14:56 〜 15:01 品川 京浜…

JScriptのメソッドの速度/concat

concatはconcatenateの略で文字列を連結させる。 var str = str2.concat(str3);は、 var str = str2 + str3;と同じ。 時間も、メソッド化で遅くなっただけ。 恐らく、こういうメソッドがあったほうが オブジェクト指向っぽく見えるからあるのだろう。 前回の…

JScriptのメソッドの速度/substring

substringはcharAtと同じ結果を出す場合、 2%ほど遅くなるようである。 また、違う位置の文字列を取り出してもほぼ同じ時間がかかる。 大きな文字列を取り出す場合は、やはり違ってくる。 文字列の結合のときと同じように、 http://d.hatena.ne.jp/inamori/2…

Arrayの初期化子の末尾のカンマ

要旨 Arrayの初期化の動作がIEとFirefoxで違う。 ECMAの仕様通りなのはIE(JScript)、 っぽい。 経緯 自動巡回のスクリプトをWSH/JScriptで組んでいたが、 Windowsを98からMEに変えたとき、 ときどき動作がおかしいことがあった。 しかし、致命的ではないので…

JScriptのメソッドの速度/charAt

ここからは、Stringのメソッドを取り上げていく。 charAtはさすがに自作で代替できないので、 このメソッドの速度だけを計測する。 長い文字列でも短い文字列でもどの位置でも同じ時間がかかるか。 長さ10〜100万まで行ってみたが、 いずれも1回当たり3.1μs…

JScriptのメソッドの速度/join(3)

Arrayには長さ1の文字列が2n個格納されているとする。 これを順に結合していくとする。 結合にかかる時間は、結合された結果の文字列の長さに比例し、 長さが1なら単位時間かかるとする。 すべての結合にかかる時間は、 2 + ... + 2n = 2n-1(2n + 1) - 1 と…

JScriptのメソッドの速度/join(2)

なぜ前回の自作joinメソッドが遅いかというと、 文字列の結合にかかる時間には次のような性質があるからだ。 長さnの文字列の結合を、1億/n回繰り返す。 この実行時間の10回平均を出す。結合した結果の文字列の長さが16k以内だと 結合の回数にだいたい比例し…

JScriptのメソッドの速度/join(1)

前にも書いたが、http://d.hatena.ne.jp/inamori/20060927JScriptでは、ある程度大きくなると文字列の結合が異常に遅い。 しかし、joinで結合すると非常に速くなる。 だから、新たにオブジェクトを作ってでもjoinを使うべきだ。 組込みのjoinと、単純に結合…

JScriptのメソッドの速度/reverse

spliceは省略。 気が向いたらあとで。 大きさ10のArrayを用意して、 この反転を10万回繰り返す。 この実行時間の10回平均を出す。 結果は、 組込み459ms 自作1103ms となった。 Arrayが大きくなっても、だいたいこんなカンジ。 新たなオブジェクトの生成がま…

JScriptのメソッドの速度/slice

sliceは、Arrayの一部を取り出すメソッドである。 元のArrayは変わらない(ベンチマークしやすい)。 ary.slice(a, b);のように使い、 aは取り出し始めの位置、bは終わりの位置。 負なら後ろから数える。 ary.slice(0); // 0,1,2,3,4,5 ary.slice(1); // 1,2…

JScriptのメソッドの速度/unshift(2)

unshiftは、 Arrayの長さが大きいほうが当然時間がかかるが、 短くなるとメソッド呼び出しのコストが大きくなる。 unshiftとメソッドを呼び出さない方法で、 Arrayの頭に要素を追加する時間を比較しよう。 メソッドを呼び出さないコードは次のよう: functio…

JScriptのメソッドの速度/unshift(1)

unshiftはArrayの先頭に要素を追加し、Arrayを返す。 複数追加できる。 長さ0のArrayを用意して、 何も追加しないというのを10万回繰り返す。 この実行時間の10回平均を出す。 // 232ms function test1() { var a = [ ]; for(var i = 0; i a.unshift(); } }/…