C++ã®std::vectorã«push_backãã¦ããã¨ãããé åã確ä¿ãã¦ããããè¶
ãããã«ãªã£ããã¾ãããç¨åº¦ãã¨ãã®ããé åã確ä¿ããã¨ããæ©æ§ã«ãªã£ã¦ãã¾ãã
2倍だけじゃない - d.y.d. ã«ã¾ã¨ãã¦ããã¾ãããstd::vectorãé¡ä¼¼ããã³ã³ããã¯2åãã¤é åã大ãããã¦ããã®ãã¨æãããã1.5åã¨ããã®ãå¤ããã§ãããå®éã«VC10 beta2ã§åããã¦ã¿ãã¨ã
#include <iostream> #include <vector> int main() { std::vector<int> v; for(int i = 0; i < 100; i++) { const std::vector<int>::size_type old_cap = v.capacity(); v.push_back(i); const std::vector<int>::size_type new_cap = v.capacity(); if(old_cap < new_cap) std::cout << new_cap << " "; } }
1 2 3 4 6 9 13 19 28 42 63 94 141
ãªãã»ã©ã確ãã«1.5åã«ãªã£ã¦ããããã§ããã
ä¸ã®ãªã³ã¯å
ã«1.5åã§ããçç±ã®èª¬æãç´¹ä»ããã¦ãã¾ãã2åã ã¨ä»ã¾ã§ç¢ºä¿ããé å以å¤ã«é åã確ä¿ããå¿
è¦ãããã¾ããã1.5åã ã¨é åãåå©ç¨ãããã¨ãå¯è½ãªãã ããã§ããããã¯ç´ æ´ãããã§ãããä¸è¬ã«åçãé»éæ¯æªæºãªãåå©ç¨ãå¯è½ã§ããä»ã¾ã§ç¢ºä¿ããé åãã
S = 1 + r + ⦠+ rn-1
ä»ç¢ºä¿ãã¦ããé åãã
T = rn
次ã«ç¢ºä¿ããé åãã
U = rn+1
ã¨ããã¨ãS ≥ Uãªãåå©ç¨ãã§ããã¨ãã¾ããè¿ä¼¼ã使ã£ã¦ã
rn / (r - 1) ≥ rn+1
r2 - r - 1 ≤ 0
ããã解ãã¦ã
(0 < ) r ≤ (1 + â5) / 2
ã¨ããããã§ãã
ãªãã»ã©åå©ç¨ããã¨ã¡ã¢ãªã®å©ç¨å¹çãããããã§ããã§ã¯ãã©ã®ç¨åº¦ããã®ã§ãããããPythonã§100ä¸åã®pushbackã1.5åã¨2åã§ã·ãã¥ã¬ã¼ããã¦ãé åã確ä¿ããç´åã¨ç´å¾ã®ç¹ããããããã¾ããã
r = 1.5 T = 16 S = 0 N = 10 ** 6 while T < N: U = int(T * r) if S >= U: S = S - U + T else: S = S + T print T + 1, ",", S + U print U, ",", S + U T = U
ã¡ãã£ã¨ããã ã¨ã©ã¡ããã¡ã¢ãªå¹çããããããããªãã§ãããããã§ãã¡ã¢ãªå©ç¨çã¨ãããã®ãèãã¦ã¿ã¾ããããpush_backã®åæ°ãS+Tã§å²ã£ããã®ã§ãããããã°ã©ãã«ãã¦ã¿ã¾ãã
åç¹ãç´ç·ã§çµãã§ããã®ã¯ããããããã§ãããã¾ãæ°ã«ããªãã¨ãããã¨ã§ã
ã©ãã§ããããããããã«ããã§ãããããã§åç¹ã®ã¡ã¢ãªå©ç¨çãåç´ã«å¹³åãã¦ã¿ã¾ããããããªã«æªããªãå¹³åã®åãæ¹ã ã¨æãã¾ããããããã¨ã
r = 1.5 : 0.382
r = 2.0 : 0.390
å¤ãããªãããããr = 2ã®ã»ããå°ãå©ç¨çããããããã§ãããr = 2ã®ã¨ãçè«çã«ã¯0.375ã«ãªããr = 1.5ãæåã®ã»ããå°ãããã®ã§ãçµå±ã¯åããããã®ããã§ããr = 1.5ã®ã¨ãã¯ãåå©ç¨ã§ãã¾ããããã®æåã§ã¯å¹çãæªãã®ã§ããã
ã¾ããææªã®å¹çã¯ãr = 1.5ã¨r = 2ã§0.25ã¨ãã¾ãã¾åãã«ãªã£ã¦ãã¾ããåå©ç¨ããããªãå ´åå¹çã¯ã
(r - 1) / r2
ã§ããããã¯r = 2ã®ã¨ãã«æ大ã«ãªãã¾ãã
çµè«ã¨ãã¦ã¯ãr = 1.5ã¨2ã§ã¯ã¡ã¢ãªå¹çã¯å¤ãããªãã¨ãããã¨ã«ãªãã¾ããã
ããããã¨ãé å確ä¿ããã¨ãã®ã³ãã¼ã®åæ°ãr = 1.5ã®ã¨ãã®ã»ãã大ãããªãããã®år = 2ã®ã¨ãã®ã»ããæå©ã«ãªãã¨æãã¾ãã