本文主要是介绍边界处理——哨兵思想,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.基本原理
哨兵顾名思义是处于边界的兵,它的作用是简化边界条件的处理,降低时间复杂度里面的常数因子,用下面的两个程序来说明,应该更通俗易懂,在“search_value2”中,由于设置了哨兵,整个程序会少很多边界判断,“search_value2”的平均计算量是比“search_value1”少。
#include<iostream>
#include<vector>using namespace std;/*
判断数组src里面是否包含value
包含:返回True
不包含或者src为空:返回False
*/
bool search_value1(const vector<int>& src, const int& value) {if (!src.size())return false;int src_len = src.size();for (int i = 0; i < src_len; ++i) {if (src[i] == value)return true;}return false;
}bool search_value2(vector<int> src, const int& value) {if (!src.size())return false;if (src[0] == value)return true;src[0] = value; //哨兵int i = src.size() - 1;while (src[i] != value)--i;if (i != 0)return true;return false;
}int main() {vector<int> src;const int value = 11;bool result1 = search_value1(src, value);bool result2 = search_value1(src, value);return 0;
}
2.扩展应用
在图像处理中,如果我们用5x5的高斯核处理图像,当图像没做任何处理的时候,程序中是有边界判断(有些大牛的处理手段比较高超,不在讨论范围内),为了减少边界判断,我们可以把图像的上下各补两行和左右各补两列,这也属于哨兵操作。
这篇关于边界处理——哨兵思想的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!