快速查找轻量硬币:二分法算法
一种可行的算法是使用二分法,将N个硬币分为两组,分别称为A组和B组,每组硬币数量相等。
-
将A组的所有硬币放在天平的一侧,将B组的所有硬币放在天平的另一侧,如果两侧重量相等,则vb不在这两组硬币中,进入第二步;否则,vb在重量较轻的一组硬币中,进入第三步。
-
将A组和B组各自分为两半,得到四组硬币,分别称为A1、A2、B1、B2。将A1和B1放在天平的一侧,将A2和B2放在天平的另一侧,如果两侧重量相等,则vb不在这四组硬币中,进入第三步;否则,vb在重量较轻的一组硬币中,进入第四步。
-
将剩余的硬币全部放在天平的一侧,将vb放在天平的另一侧,如果两侧重量相等,则vb就是剩余硬币中最轻的一个;否则,vb在放vb的那一侧。
-
将剩余的硬币分为两组,重复上述步骤直到找到vb。
这种算法的时间复杂度是O(logN),比逐个比较每个硬币的重量要快得多。
原文地址: https://www.cveoy.top/t/topic/oHer 著作权归作者所有。请勿转载和采集!