将(0,1)中的有理数舍入到最接近的单位分数

Aby*_*sal 5 algorithm math fractions

对于以下问题,什么是一个好的算法?

给定一个严格在0和1之间的理性a/b,找到一个最小化| 的自然n a/b - 1/n |.

我能想到的最简单的算法是比较/b和1/ = b,b - 1,...,停车时/b ≤1/,然后比较| a/b - 1/m | 和| a/b - 1/(m + 1) |.那是O(b).你可以做的更好吗?

Dav*_*nan 7

设k = floor(b/a),然后n必须等于k或k + 1.尝试2名候选人,看看哪一名获胜.这是O(1).

这是真实的,因为1 /(k + 1)<= a/b <= 1/k,其又来自不等式k <= b/a <= k + 1.