--- bench_rfind.log Current rfind/rindex +++ bench_rfast.log New fastsearch algorithm @@ -1,40 +1,40 @@ 2.7a1+ (trunk:76951M, Dec 20 2009, 23:45:50) [GCC 4.3.2] string unicode (in ms) (in ms) % comment ========== early match, single character -0.19 0.22 86.6 "A" in "A"*1000 (*1000) -0.50 0.51 98.0 ("A"*1000).find("A") (*1000) -0.49 0.51 95.9 ("A"*1000).index("A") (*1000) -0.53 0.53 99.5 ("A"*1000).rfind("A") (*1000) -0.53 0.54 97.5 ("A"*1000).rindex("A") (*1000) +0.19 0.22 86.3 "A" in "A"*1000 (*1000) +0.49 0.51 95.4 ("A"*1000).find("A") (*1000) +0.49 0.51 95.3 ("A"*1000).index("A") (*1000) +0.53 0.55 95.7 ("A"*1000).rfind("A") (*1000) +0.53 0.55 96.4 ("A"*1000).rindex("A") (*1000) ========== early match, two characters -0.21 0.24 87.8 "AB" in "AB"*1000 (*1000) -0.51 0.53 96.8 ("AB"*1000).find("AB") (*1000) -0.51 0.53 95.8 ("AB"*1000).index("AB") (*1000) -0.52 0.53 97.9 ("AB"*1000).rfind("AB") (*1000) -0.52 0.54 96.3 ("AB"*1000).rindex("AB") (*1000) +0.21 0.25 85.0 "AB" in "AB"*1000 (*1000) +0.51 0.54 95.0 ("AB"*1000).find("AB") (*1000) +0.51 0.53 95.0 ("AB"*1000).index("AB") (*1000) +0.54 0.57 95.5 ("AB"*1000).rfind("AB") (*1000) +0.54 0.57 95.8 ("AB"*1000).rindex("AB") (*1000) ========== late match, 100 characters -8.96 10.45 85.8 s="ABC"*33; (s+"E") in ((s+"D")*300+s+"E") (*100) -14.87 17.33 85.8 s="ABC"*33; ((s+"D")*500+s+"E").find(s+"E") (*100) -14.88 17.29 86.1 s="ABC"*33; ((s+"D")*500+s+"E").index(s+"E") (*100) -32.89 15.65 210.2 s="ABC"*33; ("E"+s+("D"+s)*500).rfind("E"+s) (*100) -32.81 15.63 209.9 s="ABC"*33; ("E"+s+("D"+s)*500).rindex("E"+s) (*100) +8.94 10.47 85.4 s="ABC"*33; (s+"E") in ((s+"D")*300+s+"E") (*100) +14.87 17.37 85.6 s="ABC"*33; ((s+"D")*500+s+"E").find(s+"E") (*100) +14.88 17.38 85.6 s="ABC"*33; ((s+"D")*500+s+"E").index(s+"E") (*100) +11.77 13.27 88.7 s="ABC"*33; ("E"+s+("D"+s)*500).rfind("E"+s) (*100) +11.78 13.40 87.9 s="ABC"*33; ("E"+s+("D"+s)*500).rindex("E"+s) (*100) ========== late match, two characters -2.18 2.44 89.4 "BC" in ("AB"*300+"C") (*1000) -2.52 2.77 91.2 ("AB"*300+"C").find("BC") (*1000) -2.51 2.75 91.4 ("AB"*300+"C").index("BC") (*1000) -4.34 2.36 183.7 ("C"+"AB"*300).rfind("CA") (*1000) -4.44 2.36 188.4 ("C"+"AB"*300).rindex("CA") (*1000) +2.17 2.43 89.3 "BC" in ("AB"*300+"C") (*1000) +2.53 2.75 92.1 ("AB"*300+"C").find("BC") (*1000) +2.51 2.76 91.2 ("AB"*300+"C").index("BC") (*1000) +2.10 2.31 90.8 ("C"+"AB"*300).rfind("CA") (*1000) +2.10 2.32 90.6 ("C"+"AB"*300).rindex("CA") (*1000) ========== no match, single character -3.47 3.51 98.7 "B" in "A"*1000 (*1000) -3.77 3.77 100.0 ("A"*1000).find("B") (*1000) -6.86 3.59 190.9 ("A"*1000).rfind("B") (*1000) +3.48 3.53 98.5 "B" in "A"*1000 (*1000) +3.77 3.79 99.6 ("A"*1000).find("B") (*1000) +3.70 3.61 102.4 ("A"*1000).rfind("B") (*1000) ========== no match, two characters -6.69 7.52 89.0 "BC" in "AB"*1000 (*1000) -6.98 7.79 89.6 ("AB"*1000).find("BC") (*1000) -14.12 13.46 104.9 ("AB"*1000).rfind("BC") (*1000) +6.72 7.60 88.4 "BC" in "AB"*1000 (*1000) +7.00 7.81 89.5 ("AB"*1000).find("BC") (*1000) +7.67 8.26 92.9 ("AB"*1000).rfind("BC") (*1000) (...) -368.05 416.69 92.3 TOTAL +311.13 409.25 91.9 TOTAL