像素世界算法复杂度
(本文未经许可禁止转载)
在具体指明算法复杂度前,我们需要搞清楚像素世界的计算流程。以下首先列出像素世界大致的计算流程图。
GLSL渲染模式
GLSL渲染模式计算复杂度
常数时间项(CPU时间)
(1),(2),(3),(4),(6),(7),(10),(11),(12),(14),(15),(16),(18)的计算复杂度:
O(1)
图层尺寸依赖项(CPU时间)
(5),(17)的计算复杂度:
O(HW+\sum_{k=1}^n{H_kW_k})
H
: 图层高度W
: 图层宽度H_k
: 第k参数层的高度W_k
: 第k参数层的宽度
输入代码长度依赖项(CPU时间)
(8),(9)的计算复杂度:
O(S)
S
: 输入代码长度 注意:这里的(9)指绝大多数情况
未知渲染时间项(GPU时间)
(13)的计算复杂度:
O(\infty)
最快的渲染时间是
O(WH)
最慢没有上限——如果您愿意,可以写个死循环把PixelsWorld锁住。
准确的来说,(13)的复杂度为:
O(HWK)
K
即是您GLSL代码的单次运行的计算时间复杂度。
和其它编程语言一样,像素世界没有断言您的代码是否含有死循环的能力。
shadertoy渲染模式
shadertoy模式的运算时间复杂度和GLSL一模一样。在此不做多的赘述。
Lua渲染模式
Lua的渲染流程非常单一但Lua十分强大。 大部分我们用Lua是想用它在图层上执行一些功能脚本或者渲染代理。
常数渲染复杂度(CPU时间)
(1),(2),(4),(5)的渲染复杂度:
O(1)
未知渲染时间项(CPU/GPU时间)
(3)的计算复杂度:
O(\infty)
同样,当你什么都不做的时候,是
O(1)
。 如果您想保持输入像素传到输出像素,是O(WH)
。 当然您仍然可以写死循环。也可以运行写了死循环的GLSL、写了死循环的shadertoy、死循环的Lua、写了死循环的js、只输入但不显示控制台的控制台指令。
不明觉厉 Σ(゚д゚;)