Common algorithm ideas

1 exhaustive algorithm Exhaustive attack method is the simplest algorithm. It depends on the power of computer Calculati...
1 exhaustive algorithm
2 recurrence method
3 recursive algorithm
4 divide and conquer algorithm
5 probability algorithm

1 exhaustive algorithm

Exhaustive attack method is the simplest algorithm. It depends on the power of computer
Calculation ability, to exhaust every possible situation, so as to achieve the purpose of solving the problem. The efficiency of exhaustive algorithm is not high, but it is suitable for some cases where there is no obvious law to follow.

  • The basic idea of exhaustive algorithm
    The basic idea of exhaustive algorithm is to search for the correct answer from all possible situations. The steps are as follows:
  1. For a possible case, calculate the result.
  2. Determine whether the results meet the requirements. If not, perform step 1 to search for the next possible situation. If the requirements are met, it means finding a correct answer.

When using the exhaustive algorithm, we need to know the range of the answer to the problem, so that we can search the answer within the specified range. After specifying the scope, you can use circular statements and conditional statements to gradually verify the correctness of the candidate answers, so as to get the correct answers

import java.util.Scanner; // Solving the problem of chicken and rabbit in the same cage by exhaustive method public class ChickenAndRabbit { static int chicken, rabbit; public static boolean methodOfExhaustion(int head, int foot) { boolean result = false; int i, j; for (i = 0; i <= head; i++) { j = head - i; if (i * 2 + j * 4 == foot) { result = true; chicken = i; rabbit = j; } } return result; } public static void main(String[] args) { System.out.println("Solving the problem of chicken and rabbit in the same cage by exhaustive method..."); System.out.print("Please enter the number of headers:"); Scanner input = new Scanner(System.in); int head = input.nextInt(); System.out.print("Please enter the number of feet:"); int foot = input.nextInt(); if (methodOfExhaustion(head, foot)) System.out.println("chicken " + chicken + " Only rabbit " + rabbit + " Only."); else System.out.println("No solution."); } }

2 recurrence method

Recursive algorithm is a very common algorithm idea, which has a wide range of applications in mathematical calculation. The recurrence algorithm is suitable for the situation with obvious formula law.

  • Basic idea of recursive algorithm

Recursive algorithm is the representative of a rational thinking mode, which is based on the existing data and relations, and gradually derived the results. The execution process of recursive algorithm is as follows:

  1. According to the known results and relations, the intermediate results are solved.
  2. Determine whether the requirements are met, if not, continue to solve the intermediate results according to the known results and relations; if the requirements are met, it means to find a correct answer.

Recursive algorithms often need users to know the logical relationship between the answer and the question. In many mathematical problems, there are clear calculation formulas that can be followed, so the recurrence method can often be used to achieve.

import java.util.Scanner; public class RabbitLitter { static int fibonacci(int n) { if (n == 1 || n == 2) { return 1; } else { return fibonacci(n-1) + fibonacci(n-2); } } public static void main(String[] args) { System.out.println("Recursive algorithm for rabbit litter..."); System.out.print("Please enter the time:"); Scanner scanner = new Scanner(System.in); int month = scanner.nextInt(); System.out.printf("after %d Month, CO breeding %d For rabbits\n", month, fibonacci(month)); } }
Recursive algorithm for rabbit litter Please enter time: 12 After 12 months, 144 pairs of rabbits can be bred Process finished with exit code 0

3 recursive algorithm

import java.util.Scanner; public class RecursiveAlgorithm { static long fact(int n) { if (n <= 1) return 1; else return n * fact(n - 1); } public static void main(String[] args) { System.out.println("Recursive algorithm for factorials..."); System.out.print("Please enter an integer:"); Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); System.out.printf("%d The factorial is %d.\n", n, fact(n)); } }
Recursive algorithm solving factorials Please enter an integer: 12 The factorial of 12 is 479001600 Process finished with exit code 0

4 divide and conquer algorithm


import java.util.Scanner; public class DivideAndConquerAlgorithm { static final int MAXCOINNUM = 30; static int falseCoin(int[] coin, int low, int high) { int sum1, sum2; sum1 = sum2 = 0; // Recursive export if (low + 1 == high) { if (coin[low] < coin[high]) { return low + 1;// The coin number is 1 larger than the subscript } else { return high + 1; } } // Decomposition problem if ((high - low + 1) % 2 == 0) {// When the number of coins is even for (int j = low; j <= low + (high - low) / 2; j++) { sum1 += coin[j]; // The weight of the first half of the coin } for (int j = low + (high - low) / 2 + 1; j <= high; j++) { sum2 += coin[j]; // The weight of the second half of the coin } if (sum1 > sum2) // Counterfeit money in the second half, continue to search in the second half return falseCoin(coin, low + (high - low) / 2 + 1, high); else // Counterfeit money in the first half, continue to search in the first half return falseCoin(coin, low, low + (high - low) / 2); } else { // When the number of coins is odd for (int j = low; j <= low + (high - low) / 2 - 1; j++) { sum1 += coin[j]; // The weight of the first half of the coin } for (int j = low + (high - low) / 2 + 1; j <= high; j++) { sum2 += coin[j]; // The weight of the second half of the coin } if (sum1 > sum2) { // Counterfeit money in the second half, continue to search in the second half return falseCoin(coin, low + (high - low) / 2 + 1, high); } else if (sum1 < sum2) { // Counterfeit money in the first half, continue to search in the first half return falseCoin(coin, low, low + (high - low) / 2 - 1); } else { // The counterfeit is the middle coin return low + (high - low) / 2 + 1; } } } public static void main(String[] args) { System.out.println("The problem of solving counterfeit money by divide and conquer algorithm..."); int[] coin = new int[MAXCOINNUM]; System.out.print("Please enter the total number of coins:"); Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); System.out.println("Please input the weight of coins one by one (only one counterfeit)..."); for (int i = 0; i < n; i++) { coin[i] = scanner.nextInt(); } System.out.printf("%d Of the coins, No %d Coins are counterfeit.\n", n, falseCoin(coin, 0, n - 1)); } }
Divide and conquer algorithm for counterfeit money Please input the total number of coins: 13 Please input the weight of coins one by one (only one counterfeit coin is allowed) 1 5 5 5 5 5 5 5 5 5 5 5 5 The first of the 13 coins is counterfeit. Process finished with exit code 0

5 probability algorithm


import java.util.Scanner; public class ProbabilityAlgorithm { static double MonteCarloPI(int n) { double PI, x, y; int sum = 0; for (int i = 0; i < n; i++) { x = Math.random(); // Generate a random number between 0 and 1 y = Math.random(); // Point falls in shadow area if (x * x + y * y <= 1) sum++; } // π = 4 * probability PI = 4.0 * sum / n; return PI; } public static void main(String[] args) { System.out.println("Monte Carlo algorithm π ..."); Scanner scanner = new Scanner(System.in); System.out.print("Please enter the number of points (the larger the number,π The more accurate the value of):"); int n = scanner.nextInt(); double PI = MonteCarloPI(n); System.out.println("π = " + PI); } }
Monte Carlo algorithm for π Please enter the number of points (the larger the number, the more accurate the value of π): 100000000 π = 3.14146396 Process finished with exit code 0 Wonderful hands and raw flowers 46 original articles published, 34 praised, 10000 visitors+ Private letter follow

5 February 2020, 08:34 | Views: 1851

Add new comment

For adding a comment, please log in
or create account

0 comments