给定输入输出映射集,求对应算法及正确公式(含自拟公式验证)
验证输入输出映射公式并推导正确表达式
首先咱们先测试你给出的公式 $\LARGE\boxed{2^{\lfloor\log_2(x)\rfloor}}$,看看它和输入输出集的匹配情况:
- 当x=0时,$\log_2(0)$ 是未定义的,公式无法计算,但输入0对应的输出是1,不匹配;
- 当x=1时,$\lfloor\log_2(1)\rfloor=0$,$2^0=1$,但实际输出是2,不匹配;
- 当x=2时,$\lfloor\log_2(2)\rfloor=1$,$2^1=2$,但实际输出是4,也不匹配。
所以这个公式和给定的输入输出集不相符,咱们来重新推导正确的公式:
先梳理输入输出的规律:
- x=0 → 1 = 2⁰
- x=1 → 2 = 2¹
- x=2~3 → 4 = 2²
- x=4~7 → 8 = 2³
- x=8~15 → 16 = 2⁴
可以发现,所有输入对应的输出都是大于x的最小2的正整数次幂(x=0时,大于0的最小2的幂就是1)。用数学公式可以统一表示为:
$$\LARGE\boxed{2^{\lceil\log_2(x+1)\rceil}}$$
咱们逐个验证所有输入:
- x=0:$\lceil\log_2(0+1)\rceil=\lceil\log_2(1)\rceil=0$,$2^0=1$,匹配;
- x=1:$\lceil\log_2(1+1)\rceil=\lceil1\rceil=1$,$2^1=2$,匹配;
- x=2:$\lceil\log_2(2+1)\rceil=\lceil1.584...\rceil=2$,$2^2=4$,匹配;
- x=3:$\lceil\log_2(3+1)\rceil=\lceil2\rceil=2$,$2^2=4$,匹配;
- x=4:$\lceil\log_2(4+1)\rceil=\lceil2.321...\rceil=3$,$2^3=8$,匹配;
- x=7:$\lceil\log_2(7+1)\rceil=\lceil3\rceil=3$,$2^3=8$,匹配;
- x=8:$\lceil\log_2(8+1)\rceil=\lceil3.169...\rceil=4$,$2^4=16$,匹配;
- x=15:$\lceil\log_2(15+1)\rceil=\lceil4\rceil=4$,$2^4=16$,匹配。
这个公式完美覆盖了所有输入输出的情况!
如果用编程场景下的位运算来实现(更高效),也可以写成:
- 当x=0时,输出1;
- 当x≥1时,输出
1 << (floor(log2(x)) + 1),这和上面的数学公式是完全等价的。
内容的提问来源于stack exchange,提问作者Neji Soltani
相关产品推荐
相关产品推荐

