1. 队列的简单应用汇总
1.1. 图元识别
问题描述:数字化图像是一个 m*m 的像素矩阵。在单色图像中,每个像素的值要么为0,要么为1。值为1的像素表示图元上的一个点,称其为图元像素。两个像素是相邻的,是指它们左右相邻或上下相邻。像个相邻的图元像素是同一个图元的像素。图元识别的目的就是给图元像素做标记,使两个像素标记相同,当且仅当它们是同一个图元的像素。
1 | | 0 1 0 1 1 0 2 0 3 3 |
在上图中,图元像素都做了标记,两个像素标记相同,当且仅当它们属于同一个图元,用数字 2,3,4… 作为图元标记。
求解策略:通过扫描像素来识别图元,扫描的方式是逐行扫描,每一行逐行扫描。当扫描到一个未标记的图元像素时,给它一个图元标记。然后把这个图元像素作为一个新图元的种子,通过识别和标记所有与该种子相邻的图元像素,来寻找新图元剩余的像素。这个过程一直持续到没有新的、未标记的、相邻的图元像素为止。
标记图元像素的程序用到很多技巧:用 0 值像素在图像四周建立“围墙”;用数组 offset 来寻找与给定像素相邻的像素。借助一个队列(也可以是个栈),来存储本身已经标记,而其相邻位置尚未标记的方格。
1 |
|
时间复杂度:函数 labelComponents 总的时间复杂度为 O(m^2)
1.2. 工厂仿真
略