2015-05-09 40 views
2

我谷歌搜索,找到“安全墙”的零答案,所以我敢肯定,这不是正确的术语。我会解释一下自己:什么是安全墙,我如何使用它?

正如我读过的,我正在谈论采取一个二维数组,并将其放置在同一个阵列中,每边增加一个单元格以确保保持安全并且不会获得超出我创造的限制。

什么是这个技术的正确术语,我将如何使用它?

+0

在金丝雀值(或哨兵)上搜索 – amdixon

+1

您正在寻找的术语是'哨兵'。 – EJP

+0

我已经为你清理了你的问题,但目前还不清楚你想知道什么。你有没有想要解决的问题? –

回答

0

与其他人一样说,你需要搜索它“定点”或类似“定点控制” ..

可以使用定点控制,当你不知道大小或程序的限制。例如,你正在写一个程序,它正在计算班级的平均分数。但是你不知道有多少学生在课堂上。或者你插入你不知道限制的数组。然后你可以使用哨兵控制这个工作。

让我们看看这个例子中,

int grade; 
int totalgrade = 0; 
int studentCount = 0; 

std::cin >> grade; 

while (grade != -1) 
{ 
totalgrade = totalgrade + grade; 
studentCount ++; 
std::cin >> grade; 
} // loop until user enter -1 

所以,如果你不知道有多少值将从用户输入,你可以用定点控制这项工作。您还可以阅读更多关于sentinel value

0

这些通常被称为“虚影单元”,通常用于数值模拟或图像处理,其中您正在将内核(例如平滑或差分运算符)应用于数组。它们允许你在没有特殊外壳边缘的情况下应用内核。

例如;假设你要平滑图像 - 你可以使用像一个内核:

0.0 0.1 0.0 
0.1 0.6 0.1 
0.0 0.1 0.0 

您可以通过将源图像应用此,对于每一个像素,您可以通过围绕内核计算目的地像素的值源像素并将所覆盖的像素的加权贡献相加(0.6 *源像素的值,加上上面,下面和侧面中的每个像素的值的0.1倍)。对每一个像素做这件事,最终会得到原始图像的平滑版本。

这很好,但问题是“你在边界单元做什么?”对于边界情况(这可能会非常棘手并可能降低性能),如果/然后逻辑复杂化,您可以在每边添加1层幻影单元格。

当然,您必须在运行算法之前为单元格选取值。你如何选择它们的价值取决于你的算法。您可以选择将它们全部设置为零,但在平滑内核的情况下,这会使图像在其边界处变暗,所以这可能不是您想要的。更好的计划是用最近的非鬼影单元的值填充鬼影单元。

您还需要弄清楚需要多少个虚影单元,这取决于内核的大小。对于像上面这样的3x3内核,你需要1层鬼影单元(以照顾可能“悬挂”边缘的内核部分)。更复杂的内核可能需要更多(5x5内核需要2层,等等)。

你可以谷歌“鬼细胞计算”找出更多(添加'计算',或者你会得到一个很多生物学结果!)

+0

非常感谢你们, 安娜,这正是我所寻找的信息谢谢:) –

相关问题