詳ãã解説編ããããã¯ãããã¾ããã
ä¸è¨ã®ãããªç¶æ³ã«å¯¾ããå¥ã®çã§ãã
å°å ¥
ä»åã¯ãæµ®åå°æ°ç¹æ°ããããã使ããªãæ¹éã§èãã¾ãã
ããï¼èªåã§æ±ºããï¼ä¸é $b$ ã«å¯¾ãã¦ã忝ã $b$ 以ä¸ã®ï¼æ¢ç´ï¼åæ°ã®éå $\Q_b$ ãèãã¾ã*1ã ããªãã¡ã$\Q_b = \{p/q \mid 0\lt q\le b\}$ ã§ãã
ãã¦ããã颿° $f\colon \R\to \{\top, \bot\}$ ã§ãã£ã¦ãæ¬¡ã®æ¡ä»¶ãæºãããã®ãèãã¾ã*2ã
- $\alpha\in\R$ ãåå¨ãã$f(x) = \top \iff x \le \alpha$ ãæãç«ã¤ã
ãã®ã¨ãã$\Q_b$ ã®è¦ç´ ã®ãã¡ $\alpha$ ã«æãè¿ãè¦ç´ ãæ±ãã¦ã¿ã¾ãããã¨ãã話ã§ãã $\alpha_{\top} \triangleq \max\,\{r\in\Q_b\mid f(r) = \top\}$ ã¨ã$\alpha_{\bot} \triangleq \min\,\{r\in\Q_b\mid f(r) = \bot\}$ ãæ±ãã¾ã*3ã
$\alpha - \alpha_{\top}$ 㨠$\alpha_{\bot} - \alpha$ ã¯ããããã $1/b$ ã§æãããã¾ãã
誤差ã«é¢ãã話
$0\lt\varepsilon\lt 1/b$ ã«å¯¾ã㦠$\alpha = 1/b-\varepsilon$ ã®ã¨ãã$\alpha_{\top} = 0$ ã§ããã$\alpha - \alpha_{\top} = 1/b - \varepsilon$ ã§ãã $\varepsilon$ ã¯ãããã§ãå°ããã§ããã®ã§ãææªæã«ã¯å°ãªãã¨ã $1/b$ ç¨åº¦ã®èª¤å·®ãçãã¾ãã
䏿¹ããã $i$ ã«å¯¾ã㦠$i/b \le \alpha \lt (i+1)/b$ ãæãç«ã¡ã$i/b$ 㨠$(i+1)/b$ 㯠$\Q_b$ ã«å±ããããã誤差㯠$1/b$ ã§ä¸ããæãããã¾ãã
$\alpha_{\bot}$ ã«å¯¾ãã¦ã対称ãªè°è«ãé©å½ã«ããã°ããã®ã§åãã§ãã
ç´¹ä»
ããã¯ãSternâBrocot tree ã¨ããæ¨ãç¨ãããã¨ã§å¯è½ã§ãã
èªã¿æ¹ã«é¢ãã¦
Moritz Stern ããã¯ãã¤ãã®æ¹ã§ãããã ã¦ãããã¿ãããªèªã¿æ¹ãããæ°ããã¾ããå ´åã«ãã£ã¦ã¯ããã ã¦ãããã«è¿ãããããã¾ããï¼ Achille Brocot ããã¯ãã©ã³ã¹ã®æ¹ã§ããã¶ãããã¿ãããªèªã¿æ¹ãããæ°ããã¾ãã
ãã©ã³ã¹èªã® sans ã tableaux ã®ãããªåèªã¯ï¼ãªã¨ã¾ã³ãèµ·ããªãéãï¼æ«å°¾ã® /z/ ãèªã¾ãªãã¨æãã®ã§ãããè±èªã§ãããã®åèªã使ãã¨ã㯠/z/ ã®çºé³ãããã¿ããã§ãã Paris ã®ãããªåºæåè©ã§ãè±èªã§ã¯æ«å°¾ã® /s/ ãèªãã¿ããã§ããåºæåè©ã§ã¯ãªã¨ã¾ã³ã¯èµ·ããªããããã§ããæè¿ç¥ãã¾ããã ãã©ã³ã¹ã®ãæ¹ã®ååãè±èªæèã§èªãã¨ããæ«å°¾ã®çºé³ãªã©ãå¤ãã£ããããã®ã§ããããããããããã¨æ«å°¾ä»¥å¤ãããããå¤ããããããã¾ãããMichael ããã¨ãã¯ã©ãããå¼ã°ãæ¹ããããã®ãªã®ã§ãããã
$\Q_{14}$ ã®è¦ç´ ãããªã SternâBrocot tree ã®ï¼$0$ ä»¥ä¸ $1$ 以ä¸ã®é¨åã®ï¼å³ã§ããå³ã大ããã¦åãå°ããã®ã§ãé©å®æ¡å¤§ããããã¦è¦ã¦ãã ããã æåãã¤ã¶ãã¦ã¦è¦ããªãã£ããä¸è¨ã®ç»åãã¤ã¼ããªã©ãåèã«ãã¦ãã ããã
忝ã»ååã®ä¸éãåºå®ããã¨ãã® SternâBrocot æ¨ã®ãããããããããã¦ãã pic.twitter.com/7nX2TWY1cz
— ãã³ã¡ããððð¦ (@rsk0315_h4x) 2023å¹´4æ15æ¥
SternâBrocot tree ã¯æçæ°ã®é ç¹ãããªãäºåæ¨ã§ãã ããé ç¹ $m/n$ ã®å·¦ã®åã¯æ¬¡ã®ããã«å®ã¾ãã¾ãã
- $m/n$ ããä¸ã«é ã«è¾¿ã£ã¦ãã£ãã¨ãã$m/n$ ããå°ããå¤ã§ãã£ã¦æåã«è¦ã¤ãããã®ã $m'/n'$ ã¨ããã
- ãã®ã¨ãã$m/n$ ã®å·¦ã®åã $(m+m')/(n+n')$ ã¨ããã
å³ã®åãåæ§ã«å®ç¾©ãã¾ãã ãã¨ãã°ã$3/7$ ããä¸ã«è¾¿ã£ã¦æåã«ç¾ãã $3/7$ ãã大ããé ç¹ã¯ $1/2$ ãªã®ã§ã$3/7$ ã®å³ã®å㯠$4/9$ ã¨ãªãã¾ãã
ãã詳細ã«
$3/7$ ã¨æ¸ããã¦ããé ç¹ããä¸ã«è¾¿ã£ã¦æåã«ç¾ããå·¦å´ã®é ç¹ã $2/5$ãå³å´ã $1/2$ ã§ãããã®é ç¹ã§ã¯å¤ $3/7$ ãæã¡ã¤ã¤ã$( (2, 5), (1, 2))$ ã¨ããå¤ã管çãã¦ãã¾ãã$3/7 = (2+1)/(5+2)$ ã§ããå·¦ã®å㯠$( (2, 5), (3, 7))$ ã§ $5/12$ãå³ã®å㯠$( (3, 7), (1, 2))$ ã§ $4/9$ ã¨ãªãã¾ãã
æãããããªãããããªãã¨ã¤ã¡ã¼ã¸ãã¤ãã«ãããããããªãã®ã§ãåã æããªããã¤ã¡ã¼ã¸ãã¦ã»ããã§ãã
ãã®æ å ±ã管çãããã¨ã§ãæ ¹ããå§ãã¦å·¦å³ã®åãæ±ããªããæ¢ç´¢ã§ãã¾ããæ ¹ã¯ $( (0, 1), (1, 0))$ ã§ $1/1$ ã§ããæ ¹ã®å³ã«ã¯ $1$ ãã大ããæ°ãç¾ãã¾ããã¾ã $1/0 = \infty$ ã¨ãã¾ãã
ãã¦ã$m/n$ ãã左㮠$k$ åé²ãã é ç¹ã¯ $(m+km')/(n+kn')$ ã«ãªãã¾ãã ãã®ãã¨ãããåãæ¹åã«æ½ã£ã¦ã忝ã¯ç·å½¢ã§ããå¢ããªããã¨ããããã¾ãï¼æç´ã«ä¸ã¤ãã¤æ½ããã¨ãã㨠$\Theta(b)$ åã®æ½ããçºçããã±ã¼ã¹ããã*4ï¼ã 䏿¹ã$1/1$ ããããããã«ï¼å·¦å³ã« 1 åãã¤äº¤äºã«ï¼æ½ã£ã¦ããã¨åæ¯ã« Fibonacci æ°åãç¾ãããã¨ãããªãã¨ãªããããããã«ãé²ãæ¹åãå¤ãããã¨ã«ææ°çã«å¢ãã¦ããã¾ããã¡ããã¨ãã証æã¯åèæç®ã«æãããªã³ã¯ãèªãã§ãã ããã
ããããããã§ã$O(\log(b))$ åã ããããã¾ã§æ½ã£ã¦ã $\alpha$ ãã¾ãããªãããªï¼ãã¨ããã®ãæ¢ç´¢ãããã¨ã§ã$(\alpha_{\top}, \alpha_{\bot})$ ãæ±ãããã¾ããå®éã«ã¯ã$f(m/n) = f( (m+km')/(n+kn'))$ ããªï¼ã¨ããã®ã $k$ ã«å¯¾ãã¦ææ°æ¢ç´¢ãã¾ãï¼$n+kn'\gt b$ ã«ãªã£ããæã¡åãï¼ã
ææ°æ¢ç´¢ã«ã¤ãã¦ã¯ â ãªã©ãèªãã¨ããããããã¾ããã rsk0315.hatenablog.com
ææ°æ¢ç´¢ã $O(\log(b))$ åãã£ã¦ãã$O(\log(b)^2)$ ã§ã¯ãªã $O(\log(b))$ ã§æãããã証æããåèæç®ã®ãªã³ã¯ã«ããã¾ãã
ãã£ã¦ãä¸è¨ãé©åã«æ´çãããã¨ã§ã$O(\log(b))$ åã® $f$ ã®è¨ç®ã«ãã£ã¦ $(\alpha_{\top}, \alpha_{\bot})$ ãæ±ãããã¨ãã§ãã¾ãã ç¹ã«ã$(\alpha_{\top}+\alpha_{\bot})/2$ ã¯ã$\alpha$ ã¨ã®çµ¶å¯¾èª¤å·®ã $1/2b$ 以ä¸ã®å¤ã§ãã
å®è£
ã«ã¤ãã¦è£è¶³
é ç¹ã§ç®¡çãã¦ããå¤ã $( (m_L, n_L), (m_R, n_R))$ ã®ã¨ãã対å¿ããæçæ°ã¯ $(m_L+m_R)/(n_L+n_R)$ ã§ããã$n_L+n_R\gt b$ ã®ã¨ã $(\alpha_{\top}, \alpha_{\bot}) = (m_L/n_L, m_R/n_R)$ ã¨ãªãã¾ãã
ææ°æ¢ç´¢ããã¦ã㦠$n_L+kn_R\gt b$ ã«ãªã£ãããï¼ç®æ°ã§é©å½ãª $k$ ãæ±ãã¦ï¼$\alpha_{\top} = (m_L+km_R)/(n_L+kn_R)$ ã¨ãããã$\alpha_{\bot} = m_R/n_R$ ã¨ãããã¾ããå·¦å³éã«æ½ã£ã¦ããã¨ãã¯éã®æãã«ãªãã¾ãã
é¢é£ããåé¡
- ABC 034 D
- ABC 236 E
- ABC 294 F
- Tenka1 Programmer Contest E
- ã¡ãã£ã¨èå¯ã¹ããããå¤ãããããããã¯å ¸åã ã¨æãã
- ABC 324 F
ããããæçæ°ã§ãã£ã¦ããããããªãåé¡ï¼å¤å®é¢æ°ã®ä¸ã§ä¸è§é¢æ°ãåºã¦ããã¨ãï¼ã§ã¯ãã¾ãå½¹ã«ç«ããªãæ°ããã¾ãã
åèæç®
- ã½ãããã¡ããã®è§£èª¬
- ãã³ã¡ããã®å®è£
- é£åæ° å¤§å¦æ°å¦ ã¹ãããã©ã¤ãã»ã·ãªã¼ãº (Amazon)
- ããããæ¸ããã¦ããæ¬ã
- é£åæ°å±é㨠SternâBrocot tree ã®é¢é£ãªã©ãè¼ã£ã¦ããã
- ãã®ä»è«¸ã ã®æ§è³ªãç´¹ä»ããã¦ããã
ã½ãããã¡ããã®å®è£ ã¨ãã³ã¡ããã®å®è£ ã¯ä»æ§ãéãã®ã§æ³¨æãå¿ è¦ããã§ãã ã¾ãããã³ã¡ãã㯠Rust ã ããã½ãããã¡ããã® C++ ã¯æ¯è¼çã¯ã»ãå¼·ãã ããå¤ãã®ç«¶ãã er ã®åçµã«ã¯åãã¦ããªãããã§ããåã ããã°ã£ã¦å®è£ ãã¦ãã ããã
ãã®ä»é¢é£ãã話
ããã
ã¤ããã¡ããã¾ããã
*1:ãã®è¨æ³ã¯ããããä¸è¬çãªãã®ã§ã¯ãªãããã®è¨äºã®ä¸ã§ãã³ã¡ãããåæã«ä½¿ã£ã¦ããã ãã ã¨æãã¾ãã
*2:$\top$ 㯠trueã$\bot$ 㯠false ã®ãã¨ã ã¨æã£ã¦ãã ããã
*3:ããã§ã¯ $\alpha\in\R$ ã¨ãã¦ããã®ã§ä¸¡æ¹ã®éåã¯ç©ºã«ã¯ãªããªããã$\alpha = \infty$ ã ã£ãããã¦çæ¹ã空ã«ãªãå ´åã¯ãããªã«ãã¦ãã ããã
*4:ã¨ããã®ã¯åã§ãæ´æ°é¨åã確å®ããã¾ã§ã¯åæ¯ãå¢ããªãã®ã§ã$O(\floor{\alpha}+b)$ åï¼