From: NAGAI Hidetoshi Date: 1998-04-06T12:02:23+09:00 Subject: [ruby-dev:2067] Re: [ruby-list:7298] Re: cmp operator 永井@知能.九工大です. ゼロの時に false を返す演算子の話の関連で, ちょっと実験してみました. 配列の配列について,その第一要素と第二要素をキーにソートしてみた例です. 少々変動がありますが,以下に結果を示します. システムへのパッチとテストプログラムは tar + gzip + uuencode して このメール末尾に添えています. テストケースは次の通りです. x1 : 一時変数を用いて比較する場合 x2 : '<>?' という組み込みオペレータを作成して用いた場合 (ちょっと変えてみました.(^_^) '<>' は NEQ と同じになるようにしてます.) x3 : Numeric#nonzero? というメソッドを組み込み,用いた場合 x4 : Object#nonfalse?(val) というメソッドを組み込み, obj.nonfalse?(0) という形で用いた場合 x5 : nonz? -> nonfalse?(0) としてメソッド定義し,用いた場合 x6 : Object#nonf?(val) というメソッドを定義(非組み込み)し, nonfz? -> nonf?(0) として定義,利用した場合 結果は次のようになりました. (結果の種別に付けた変な文字列は,無視してください.(^_^;) ---------------------------------------------------------------- 配列サイズ : 4995 x1 (直接比較演算) : 4.551 real 7.567 user 0.000 sys x2 (演算子組み込み) : 3.649 real 5.967 user 0.000 sys x3 (直定義メソッド) : 3.853 real 6.417 user 0.000 sys x4 (親定義メソッド) : 3.841 real 6.383 user 0.017 sys x5 (間接親メソッド) : 4.266 real 7.100 user 0.000 sys x6 (多重メソッド成) : 5.205 real 8.533 user 0.000 sys 行項目を 1 とした時の utime 比率 : x1 x2 x3 x4 x5 x6 x1 : 1.0000 0.7885 0.8480 0.8436 0.9383 1.1278 x2 : 1.2682 1.0000 1.0754 1.0698 1.1899 1.4302 x3 : 1.1792 0.9299 1.0000 0.9948 1.1065 1.3299 x4 : 1.1854 0.9347 1.0052 1.0000 1.1123 1.3368 x5 : 1.0657 0.8404 0.9038 0.8991 1.0000 1.2019 x6 : 0.8867 0.6992 0.7520 0.7480 0.8320 1.0000 ---------------------------------------------------------------- 現状に比較すると,演算子を導入した場合には 20 % 程度の速度向上が 見込めるようです. ですが,Numeric#nonzero? だとか Object#nonfalse?(val) とかでも 15 % 程度は速度向上が見込めるようなので,それでも十分かもしれません. 少し奇妙だと思ったのは x3 と x4 の結果です. x3 の方が早いだろうと思ったのですが,逆になりました. プログラムが悪いだけかなとは思いますが, そんなものなんでしょうか? -- 永井 秀利 (九工大 知能情報) nagai@ai.kyutech.ac.jp begin 644 tst.tar.gz M'XL( /Q *#4 ^U:W8_3V!7G-?XK#N$C#LEX_!TGS <(ABXM#+ ,W4KL;.0D MSHPAL8/M /-!_YH9J4^5JG954;2%;;=;*E4\M%5?BK3MRTKM8_N^ZCGW7MO) MD)D)B*$5X@IR?<\YO_-US_VP(1PTDSA1HM:QHVN:JMJF"<< P*RIU.N:R7K6 M+,.L =B6IJNF:A@&@*8;NGT,U"/T*6O#.'$C@&.!N^;Z!\@%87\8N3-WO>!= M>/7.6B]T.U"ZTPX['A9!29+\H.OW/)B'<. %M@?',>'C;#O5]WUK>UX&] 393",U^7;S!3$ MJ^5'DA=T)"GV-\EY$J!':1#Y00+%W__MQ7]V/]_=V?T5-*"( .15H?AI4$1( MY"*R&T;@@Q^ IB@RTW(&-)6,PPG@6OQJ$8K@=S%P.(5,%>;G@8L,-#1*>AB4 MD_172$E_P'V[/=!6B2 >4Z*>$W4BHCR+Z@2W3PQU%?]4BXUB58PT'%$8)P;$ M3^-E@9T8:9+4[KEQ#,O#OA>A')KQNA"$P>8BV838ZW45'';=7NPMRBPJ,LV2 MRJ'76G>\=I(CNXL@WW=[Z&?@]UA\+#>,-,\4ED$2:YRI90,O?1!&.1&MO&+O M%5>[>WW=Z^=XP,/DH2C7%O8K?M]#T .I-4RJT&)%R6@)_L320RVMFC!*MK8] MK>KIV^0^E;SL:9AJF)M? $_')S)*H;;A>%H *"B-!H<(+4.PR28/L4C)NK?7 MNC?J8!(F+*NR!S/0*BM)V.SR>>U"$?V4O_KULY?/O_WYGW_VSR=/RFBK :7$?T-,F(DR0GWY] M1.DQWR ]UFM5SM&5C07R+_[Z[.73KX\@+]8;Y,5^K;(YPL38(/_FZ1>_2]/R M[*=O,3'VGL2O\F+#C27^9>^F97,(3AFY\N*VRSN"=R3N+=S:4QBY,-KOPI%DZI74 M+RC@$Y7$[HR*99)R$8TK9A]WO*F*BB]&N.E)DR]FO!F*;=9']5A*?5\]$V\QJ1[',D;U MX(:B[:=GXG&?Z3&U<3V&8^S1@XJ9GHG'8YH?W;;'\T/OB9/]F7B:I.G056M4 MCZ-8QEY_A![IL'- 2B<09Y9U.N\,WIF\LWAG Q5 [=KE0RH2LUQ+.P-YFX:EO8&UW*4KFIUFH,&<1R;Q.TZ\ZEFZ2QP$;&AJP(EO7_G2!RU9SI^MWN4-@[9 M_UFZQ_=_75.M#_O_NV@T]S SA&C8VIC!I=2J-U5[MAWV!VZDM,?)2H(WUHPG MSUB^ M=56_O+PBMXDA6%V0$_Y!$/?M9!@%<.G\E9M+ BE(;1P^(LB8IV2HZ=T3;L)> M-V&+A>_46?BJ6N7A7P[\I'F!941'%8IS"XM%E@^>4,P* F$*X/R\P'GWI@CY[?VTX&LZ73T_3CV M@[7]] BV-'FU!OQ#Z>3EFC$GK->,5_C$Z\!5W =U/'>=AE%O&+4#%VR.'%^Q MEM/0K'S%&J9)-4L=DJEH'[VZ3%%74WP)D_%Y;)WB.%^FM,2P"KQ[0[='DE7 M-:A?NOPC62V7:>FM?'QKZ975-[;^N+X)*Y"<\.[U#EF"FJX[;!'J1JWJL( F MEF9;?+O&ND2EM'2$_H/J>034\>_C6A4P/I@2Z;9B <.G*FY&>08.0*4?(@54 M##D<#CJ?'RIX?:RT4S"IDNJQJHO M"Z>2$"^O<.OJY>5;-Z%0F#T#P\"--F;@S&S&O7[M$\8YN'J=> (^IR* MC(I@+"^-L!861S%+-P0="W:,G-/'&,L9X/@\ZB(6A:'K.OI?T74C#0,GW8WC ML T7KZWH]&,@L>=U$X!K'U^[G@W.+U_$T4PNS\) *^0"6;MZ?N7"1[#,.HQH M7(Y'MI]T:J.T4(+O(;,T5X(K2S=R^G8)2I^5\O'I$HO&TMAY:&F6B*90V";! M0F$+3I[$NQH^GZ4-@]%/C]!/YW1T+*/C,]$K1&#Q MD +ZSP4MMWV7W? Y26RN.,U$H2#X/P%C&:/>,G,]W:F)# '>(-LROYF4%H5$ M0:CATR,@CT0_9K4R:G69K%8*%'%N=8[IA,RJ,,AX\X)7V-CHW7=[BM]!CZ[< M_.C2"H_ET2)-0*.(>@ 2V5_-Y*?#7 M P%9(,A".L350