And*_*ong 3 c math optimization discrete-mathematics
举个简单的例子,假设我们正在检查a是否char c是字母数字:
if (48 <= c && c <= 57 ||
65 <= c && c <= 90 ||
97 <= c && c <= 122)
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
确认它是 6个操作.
但是,是否存在连续函数f(c),使得字母数字字节值的f(c)> 0,其余的<0?我认为是至少一个:12度的多项式,认为"适合" 12分,编织上下x轴; 但也许存在较小程度的函数,甚至非多项式.这样的公式将"简化"操作:
if (f(c) > 0)
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
这是艺术术语吗?(想到"折叠"这个词,但它不会产生任何相关的搜索结果 - 只有Haskell的折叠概念.)似乎只要我们可以将一组操作的codomain映射到一个足够精细的codomain.粒度,我们可以获得这样的"折叠".那么我的问题是:可以"折叠"节省时间吗?或者是否有一些保护原则迫使计算"折叠"的成本与计算原始"原油"操作的成本相匹配(甚至超过).
多项式与x轴相交6次,即它具有6个实根,因此6次多项式就足够了.
Run Code Online (Sandbox Code Playgroud)f(c) = -(c-48)*(c-57)*(c-65)*(c-90)*(c-97)*(c-122)
这当然会浪费时间,做5次乘法比5次逻辑运算慢得多.此外,&&并且||经常短路,您不需要完成所有这些操作.