Java算法之BFS,DFS,动态规划和贪心算法如何实现

其他教程   发布日期:2024年12月01日   浏览次数:312

本篇内容主要讲解“Java算法之BFS,DFS,动态规划和贪心算法如何实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java算法之BFS,DFS,动态规划和贪心算法如何实现”吧!

广度优先搜索

广度优先搜索算法是一种遍历或搜索树或图的算法,它从根节点开始搜索并逐层向下扩展,直到找到目标状态或所有节点都被遍历。BFS通常使用队列来实现,它每次将下一个节点放入队列中,直到所有的节点都被访问。

下面是一个Java实现:

  1. public void bfs(Node start) {
  2. Queue<Node> queue = new LinkedList<>();
  3. Set<Node> visited = new HashSet<>();
  4. queue.offer(start);
  5. visited.add(start);
  6. while (!queue.isEmpty()) {
  7. Node node = queue.poll();
  8. System.out.print(node.val + " ");
  9. for (Node neighbor : node.neighbors) {
  10. if (!visited.contains(neighbor)) {
  11. visited.add(neighbor);
  12. queue.offer(neighbor);
  13. }
  14. }
  15. }
  16. }

深度优先搜索

深度优先搜索算法是一种遍历或搜索树或图的算法,它从根节点开始递归地遍历所有子树,直到找到目标状态或所有节点都被遍历。DFS通常使用栈来实现,它每次将下一个节点压入栈中,直到所有的节点都被访问。

下面是一个Java实现:

  1. public void dfs(Node node, Set<Node> visited) {
  2. System.out.print(node.val + " ");
  3. visited.add(node);
  4. for (Node neighbor : node.neighbors) {
  5. if (!visited.contains(neighbor)) {
  6. dfs(neighbor, visited);
  7. }
  8. }
  9. }

动态规划

动态规划算法(DP)是一种解决问题的方法,它用来解决重叠子问题和最优子结构问题。DP通常用来解决优化问题,例如最短路径问题、背包问题等。

下面是一个Java实现:

  1. public int knapsack(int[] weights, int[] values, int capacity) {
  2. int n = weights.length;
  3. int[][] dp = new int[n + 1][capacity + 1];
  4. for (int i = 1; i <= n; i++) {
  5. for (int j = 1; j <= capacity; j++) {
  6. if (weights[i - 1] <= j) {
  7. dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - weights[i - 1]] + values[i - 1]);
  8. } else {
  9. dp[i][j] = dp[i - 1][j];
  10. }
  11. }
  12. }
  13. return dp[n][capacity];
  14. }

贪心

贪心算法是一种解决优化问题的方法,它总是选择当前最优解。与动态规划不同,贪心算法并没有考虑所有的子问题,而是只看当前的最优解。

下面是一个Java实现:

  1. public int knapsack(int[] weights, int[] values, int capacity) {
  2. int n = weights.length;
  3. Item[] items = new Item[n];
  4. for (int i = 0; i < n; i++) {
  5. items[i] = new Item(weights[i], values[i]);
  6. }
  7. Arrays.sort(items, (a, b) -> b.valuePerWeight - a.valuePerWeight);
  8. int totalValue = 0;
  9. int remainingCapacity = capacity;
  10. for (Item item : items) {
  11. if (remainingCapacity >= item.weight) {
  12. totalValue += item.value;
  13. remainingCapacity -= item.weight;
  14. } else {
  15. totalValue += item.valuePerWeight * remainingCapacity;
  16. break;
  17. }
  18. }
  19. return totalValue;
  20. }
  21. class Item {
  22. int weight;
  23. int value;
  24. int valuePerWeight;
  25. public Item(int weight, int value) {
  26. this.weight = weight;
  27. this.value = value;
  28. this.valuePerWeight = value / weight;
  29. }
  30. }

以上就是Java算法之BFS,DFS,动态规划和贪心算法如何实现的详细内容,更多关于Java算法之BFS,DFS,动态规划和贪心算法如何实现的资料请关注九品源码其它相关文章!