广度优先搜索广度优先搜索算法是一种遍历或搜索树或图的算法,它从根节点开始搜索并逐层向下扩展,直到找到目标状态或所有节点都被遍历。bfs通常使用队列来实现,它每次将下一个节点放入队列中,直到所有的节点都被访问。
下面是一个java实现:
public void bfs(node start) { queue<node> queue = new linkedlist<>(); set<node> visited = new hashset<>(); queue.offer(start); visited.add(start); while (!queue.isempty()) { node node = queue.poll(); system.out.print(node.val + " "); for (node neighbor : node.neighbors) { if (!visited.contains(neighbor)) { visited.add(neighbor); queue.offer(neighbor); } } }}
深度优先搜索深度优先搜索算法是一种遍历或搜索树或图的算法,它从根节点开始递归地遍历所有子树,直到找到目标状态或所有节点都被遍历。dfs通常使用栈来实现,它每次将下一个节点压入栈中,直到所有的节点都被访问。
下面是一个java实现:
public void dfs(node node, set<node> visited) { system.out.print(node.val + " "); visited.add(node); for (node neighbor : node.neighbors) { if (!visited.contains(neighbor)) { dfs(neighbor, visited); } }}
动态规划动态规划算法(dp)是一种解决问题的方法,它用来解决重叠子问题和最优子结构问题。dp通常用来解决优化问题,例如最短路径问题、背包问题等。
下面是一个java实现:
public int knapsack(int[] weights, int[] values, int capacity) { int n = weights.length; int[][] dp = new int[n + 1][capacity + 1]; for (int i = 1; i <= n; i++) { for (int j = 1; j <= capacity; j++) { if (weights[i - 1] <= j) { dp[i][j] = math.max(dp[i - 1][j], dp[i - 1][j - weights[i - 1]] + values[i - 1]); } else { dp[i][j] = dp[i - 1][j]; } } } return dp[n][capacity];}
贪心贪心算法是一种解决优化问题的方法,它总是选择当前最优解。与动态规划不同,贪心算法并没有考虑所有的子问题,而是只看当前的最优解。
下面是一个java实现:
public int knapsack(int[] weights, int[] values, int capacity) { int n = weights.length; item[] items = new item[n]; for (int i = 0; i < n; i++) { items[i] = new item(weights[i], values[i]); } arrays.sort(items, (a, b) -> b.valueperweight - a.valueperweight); int totalvalue = 0; int remainingcapacity = capacity; for (item item : items) { if (remainingcapacity >= item.weight) { totalvalue += item.value; remainingcapacity -= item.weight; } else { totalvalue += item.valueperweight * remainingcapacity; break; } } return totalvalue;}class item { int weight; int value; int valueperweight; public item(int weight, int value) { this.weight = weight; this.value = value; this.valueperweight = value / weight; }}
以上就是java算法之bfs,dfs,动态规划和贪心算法如何实现的详细内容。