深入浅出讲算法思想--蛮力法思想分析及应用

蛮力法(brute force method,也称为穷举法或枚举法)是一种简单直接地解决问题的方法,常常直接基于问题的描述,所以,蛮力法也是最容易应用的方法。虽然,用蛮力法设计的算法时间特性往往也是最低的,但是许多问题我们一开始并没有很优化的算法,而蛮力法则可以帮助我们从低效的算法结构中剖析低效的缘由,进而提炼出更为优化的算法。

  1. 蛮力法在排序算法中的应用(选择,冒泡)
  2. 蛮力法在查找算法中的应用
  3. 蛮力法在字符串匹配问题中的应用
  4. 蛮力法在求解“最近对”问题中的应用
  5. 蛮力法在求解凸包问题中的应用
  6. 蛮力法在求解最优解问题中的应用(TSP,背包问题,配对问题)

一、蛮力法在排序算法中的应用

对于一个排序问题,我们能想到的最简单的排序方法就是选择和冒泡

1、选择排序:时间复杂度O(n^2)

public class Main {
    public static void main(String[] args) {
        int[] a = {89, 45, 68, 90, 29, 34, 17};
        int min;
        for (int i = 0; i < a.length-1; i++) {
            min = i;
            for (int j = i+1; j < a.length; j++) {
                if (a[j] < a[min]) {
                    min = j;
                }
            }
            int temp = a[i];
            a[i] = a[min];
            a[min] = temp;
        }
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i] + " ");
        }
    }
}

选择排序的思路就是如此,虽也有优化思路,例如每次迭代出最大值和最小值,放在开头和结尾。但是选择排序必然要编译算真整个数组,所以最好的优化结果也是O(n^2)。

2、冒泡排序时间复杂度O(n^2)

public class Main {
    public static void main(String[] args) {
        int[] a = {89, 45, 68, 90, 29, 34, 17};
        int min;
        for (int i = 0; i < a.length-1; i++) {
            for (int j = 0; j < a.length-1-i; j++) {
                if (a[j+1] < a[j]) {
                    int temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp;
                }
            }
        }
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i] + " ");
        }
    }
}
发现问题:对于冒泡排序我们都知道,即使已经排好顺序,循环还是会继续进行,即使只比较不交换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值