1、是否可以有不使用数据结构的算法?是否可以有不使用算法的数据结构?
可以有不使用数据结构的算法,算法只是一系列指令,不一定需要数据结构,例如许多数值算法就不使用数据结构。
不可以有不使用算法的数据结构,需要某种算法来构建数据结构,也需要另一种算法来使用它以产生某种结果。一个不用于产生结果的数据结构没有太大意义。
2、如果一枚硬币正面朝上的概率为3/4,那么连续两次正面朝上和连续两次反面朝上的概率分别是多少,需要再次尝试的情况定义为出现连续两次正面朝上或连续两次反面朝上,此时需要再次尝试的概率是多少?
- 连续两次正面朝上的概率是 $ \frac{3}{4} \times \frac{3}{4} = \frac{9}{16} $
- 连续两次反面朝上的概率是 $ \left(1 - \frac{3}{4}\right) \times \left(1 - \frac{3}{4}\right) = \frac{1}{16} $
- 需要再次尝试的概率是 $ \frac{9}{16} + \frac{1}{16} = \frac{10}{16} = 0.625 $,即 62.5%
3、如果一枚硬币是公平的,先得到正面再得到正面以及先得到反面再得到反面的概率是多少,需要再次尝试的概率是多少?
- 先得到正面再得到正面的概率为 $ \frac{1}{4} $
- 先得到反面再得到反面的概率为 $ \frac{1}{4} $
- 需要再次尝试的概率为 $ \frac{1}{2} $(或 50%)
4、如何使用有偏差的骰子产生公平的结果?
可以使用类似用有偏差的硬币产生公平抛硬币结果的方法:掷有偏差的骰子6次。如果掷出的结果包含所有6个可能的值,则返回第一个值;否则,重复该过程。
5、如何从洗好的52张牌的牌堆中发5张牌的手牌?
- 创建一个包含所有52张牌的数组
- 将数组随机打乱
- 依次给每个玩家发一张牌,直到每个人都有五张
- 或者一次性给每个玩家发五张牌
- 只要牌堆是随机打乱的,每个玩家都会得到五张随机抽取的牌
6、描述在尝试将相邻节点添加到当前路径的算法中的回溯步骤。
- 当尝试将相邻节点添加到当前路径以构建完整路径时,若后续发现无法继续扩展路径,算法需进行回溯。
- 具体做法是移除之前添加的相邻节点,撤销该决策,使路径回到之前的状态,然后继续尝试其他相邻节点,直至找到完整路径或确定无法找到。
- 例如在
CompleteSelfAvoidingWalk算法中,若ExtendWalk方法添加相邻节点后无法找到完整路径,就会将该相邻节点从路径中移除,继续尝试其他相邻节点。
7、如果算法不随机化邻居列表会发生什么?
- 每次到达特定点时,算法都会按相同顺序尝试邻居节点。
- 这意味着每次路径从特定节点开始时,都会产生完全相同的路径。
- 这不会改变算法速度,只是会使结果的随机性和趣味性降低。
8、证明公式 LCM(A, B) = A * B / GCD(A, B)。
假设 g = GCD(A, B),则存在整数 m 和 n 使得 A = g * m 且 B = g * n。那么 A * B / GCD(A, B) = g * m * g * n / g = g * m * n。由于 m 和 n 没有公因数(否则该公因数会是 GCD 的一部分),所以 g * m * n 就是 A 和 B 的最小公倍数,即 LCM(A, B) = A * B / GCD(A, B)。
9、修改快速幂算法以执行模幂运算。
以下代码展示了在原快速幂算法基础上进行修改,使其执行模幂运算:
Integer: Exponentiate(Integer: value, Integer: exponent, Integer: modulus)
Integer

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



