在我用MIPS程序集编写代码之前,我正在尝试大量优化我编写的一段代码。以下是我的代码的链接:http://dl.dropbox.com/u/7264839/P1-3.c
问题是在64x64矩阵中找到1个不同颜色的像素宽线之间的交叉点数。交叉点不计入T个交叉点。此外,行之间总是至少有1个像素的空间。这是一张图片的样子。
http://dl.dropbox.com/u/7264839/Pics/pile1.png
我的基本算法是查看每个像素(除了周边的像素),如果是黑色,则忽略它。如果它不是黑色,检查两个侧面,如果它们是相同的颜色而不是黑色,检查另一侧,如果它们是相同的颜色,而不是黑色,并且与另一侧的颜色不同,则有一个路口。此外,如果找到交叉点,则可以忽略下一个像素。
我已经找到了几个优化但是动态执行时间的条件仍需要快得多。你们有任何关于加速它或一个更好的算法的技巧。非常感谢!
答案 0 :(得分:1)
你可以在黑色区域上优化你的算法:因为相交线在两个方向上需要至少3个像素长,你可以使用以下模式检查每组9个像素只有3个像素:
X . .
. X .
. . X
如果每个3x3正方形上没有像素是非黑色的,则跳过方形。如果至少有一个是非黑色的,则使用原始算法。
如果您的彩色/黑色比率较低,则可以将代码提高约3倍。