二分查找
二分搜索是一种搜索算法,用于在排序数组中查找元素的位置。这种方法,总是在数组的中间搜索元素。时间复杂度为o(logN)。可以实现复杂问题的快速搜索。不过,该算法要求必须在一个连续递增或递减的范围内进行,所以在做题前要判断题目是否满足该条件。该算法的基本代码为:
while (low <= high)
{
mid = low + (high - low);
if(pd(mid) == x)
{
low = mid + 1;
ans=mid;
}
else
high = mid - 1;
}
根据不同的题目要求可以按照题意改变判断pd()函数的内容。
DFS与BFS
本周继续学习了dfs和bfs两种算法,感觉两种算法既相似又有不同的特点。dfs像是一个堆栈,先进后出,从底部不断向上遍历;而bfs则是一个队列,先进先出,从顶部向下一层层的遍历。
深度优先搜索是搜索数据所有顶点的递归算法。DFS把要遍历每个顶点分为来过或没来过两种状态。首先将最顶部的顶点放在堆栈的底部然后访问其相邻节点,之后再不断一步步地向“浅”的地方遍历其相邻节点,不断重复,直到找到解。
广度优先搜索也是一种递归算法,BFS也将每个顶点分为来过或没来过两种情况。首先将最顶部的顶点放在队列的里面。将队列的最前面的项目标记为已访问。添加该顶点的相邻节点到队列,寻找解。不断重复,直到队列为空。
两种搜索方法都要将已经访问过的节点进行标记,不同的是dfs在标记后会抹除标记然后搜索下一种情况,而bfs则不是。
以上是本周学习内容,想法暂不成熟,希望通过做题不断打磨。