算法-蛮力法

---恢复内容开始---

特点:

第一,和其他某些策略不同,我们可以应用蛮力法来解决广阔领域的各种问题。(应用领域广)

第二,对于一些重要的问题来说(比如:排序、查找、矩阵乘法和字符串匹配),蛮力法可以产生一些合理的算法,它们多少具备上些实用价值,而且并不限制实例的规模。

第三,如果要解决的问题实例不多,而且蛮力法可以用一种能够接受速度对实例求解,那么,设计一个更高效算法所花费的代价很可能是不值得的。(代价相对较小)

第四,即使效率通常很低,仍然可以用蛮力法解决一些小规模的问题实例。(适合小规模)

第五,一个蛮力算法可以为研究或教学目的的服务。

蛮力法实例

一,

基本思路:在未排序的数中找到最小(最大)的数和这些数中的第一个(最后一个)交换。

时间复杂度:O(n^2)

实例代码:

#include <iostream.h>
void SelectSort(int* pData,int Count)
{
    int iTemp;
    int iPos;
    for(int i=0;i<Count-1;i++)
    {
        iTemp = pData[i];
        iPos = i;
        for(int j=i+1;j<Count;j++)
        {
            if(pData[j]<iTemp)
            {
                iTemp = pData[j];
                iPos = j;
            }
        }
        pData[iPos] = pData[i];
        pData[i] = iTemp;
    }
}

void main()
{
    int data[] = {10,9,8,7,6,5,4};
    SelectSort(data,7);
    for (int i=0;i<7;i++)
        cout<<data[i]<<" ";
    cout<<"\n";
}

二,冒泡排序

基本思路:通过相邻比较把较大的数和小的数交换,最后达到最大(最小)的数在最下(上)

实例代码:

 1 #include <iostream.h>
 2
 3 void BubbleSort(int* pData,int Count)
 4 {
 5     int iTemp;
 6     for(int i=1;i<Count;i++)
 7     {
 8         for(int j=Count-1;j>=i;j--)
 9         {
10             if(pData[j]<pData[j-1])
11             {
12                 iTemp = pData[j-1];
13                 pData[j-1] = pData[j];
14                 pData[j] = iTemp;
15             }
16         }
17     }
18 }
19
20 void main()
21 {
22     int data[] = {10,9,8,7,6,5,4};
23     BubbleSort(data,7);
24     for (int i=0;i<7;i++)
25         cout<<data[i]<<" ";
26     cout<<"\n";
27 }

---恢复内容结束---

时间: 2024-07-30 20:28:17

算法-蛮力法的相关文章

KMP算法(蛮力法)

1 #include<stdlib.h> 2 #include<stdio.h> 3 void next(char T[],int nextArr[],int n); 4 5 int match(char S[],int tn,char T[],int sn,int nextArr[]); 6 7 int main(void){ 8 char S[]="adefdfeeeeeeeeeabcdefgabcdefgaeiohxohoalslhoe"; 9 char

蛮力法

蛮力法就是以最直观.最直接,从头到尾,从上到下的思维去尝试解决问题. 它主要包括以下三种方式: 一个一个地解决:冒泡排序 尝试所有可能的迭代:顺序查找.模式匹配 尝试所有的排列组合:最近点对.背包问题 // 冒泡排序 void bubble_sort(array[0,..,n]) { for i=0 to i=n-2: // i表示冒第几个泡 for j=0 to j=n-2-i: if array[j] > array[j+1]: swap(array[j], array[j+1]) } /*

算法笔记_009:字符串匹配【蛮力法】

1 问题描述 给定一个n个字符组成的串(称为文本),一个m(m <= n)的串(称为模式),从文本中寻找匹配模式的子串. 2 解决方案 2.1 具体编码 package com.liuzhen.chapterThree; public class BruteForceStringMatch { //根据文本串N,和模式串M,返回第一个匹配模式串的子串在N中的位置 public static int getStringMatch(int[] N , int[] M){ int n = N.leng

算法笔记_008:选择排序和冒泡排序【蛮力法】

目录 1 问题描述 2 解决方案 2.1 选择排序原理简介 2.2 具体编码(选择排序) 2.3 冒泡排序原理简介 2.4 具体编码(冒泡排序) 1 问题描述 给定一个可排序的n元素序列(例如,数字.字符和字符串),将它们按照非降序方式重新排列. 2 解决方案 2.1 选择排序原理简介 选择排序开始的时候,我们从第一个元素开始扫描整个列表,找到它的最小元素,然后和第一个元素交换,将最小元素和第一个元素交换位置:然后,我们从第二个元素开始扫描剩下的n-1个元素,找到这n-1个元素中的最小元素,将最

ARTS汇总

第一周 - 2019/03/18~2019/03/22 ARTS-1 | Algorithm | TwoSum | leetcode ARTS-1 | Review | Brute Force | BF算法 | 蛮力法 ARTS-1 | Tips ARTS-1 | Share | JMeter录制通过SOCKS代理访问的网站 原文地址:https://www.cnblogs.com/jamesnpu/p/10562031.html

[算法]删除字符串中重复的字符

如何删除字符串中重复的字符 问题描述: 删除字符串中重复的字符,例如,"good"去掉重复的字符串后就变成"god". 第一种方法: "蛮力法",最简单的方法就是把这个字符串看作是一个字符数组,对该数组使用双重循环进行遍历,如果发现有重复的字符,就把该字符置为'\0',最后再把这个字符数组中所有的'\0'去掉,此时得到的字符串就是删除重复字符后的目标字符串. 代码如下: package 删除字符串中重复的字符; public class Solu

算法笔记_018:旅行商问题(Java)

目录 1 问题描述 2 解决方案 2.1 蛮力法   1 问题描述 何为旅行商问题?按照非专业的说法,这个问题要求找出一条n个给定的城市间的最短路径,使我们在回到触发的城市之前,对每个城市都只访问一次.这样该问题就可以表述为求一个图的最短哈密顿回路的问题.(哈密顿回路:定义为一个对图的每个顶点都只穿越一次的回路) 很容易看出来,哈密顿回路也可以定义为n+1个相邻顶点v1,v2,v3,...,vn,v1的一个序列.其中,序列的第一个顶点和最后一个顶点是相同的,而其它n-1个顶点都是互不相同的.并且

算法笔记_016:凸包问题(Java)

目录 1 问题描述 2 解决方案 2.1 蛮力法 1 问题描述 给定一个平面上n个点的集合,它的凸包就是包含所有这些点的最小凸多边形,求取满足此条件的所有点. 另外,形象生动的描述: (1)我们可以把这个问题看作如何用长度最短的栅栏把n头熟睡的老虎围起来. (2)也可以这样看:请把所讨论的点想象成钉在胶合板上的钉子,胶合板代表平面.撑开一根橡皮筋圈,把所有的钉子都围住,然后啪一声松开手.凸包就是以橡皮圈为边界的区域.具体示意如下图1所示: 图1  用橡皮筋来解释凸包 2 解决方案 2.1 蛮力法

算法设计与分析 ------最近对问题与8枚硬币问题

利用减治法实现8枚硬币问题: 参考资料:http://blog.csdn.net/wwj_748/article/details/8863503    算法设计--八枚硬币问题 1 #include "stdafx.h" 2 #include <iostream> 3 #include <stdio.h> 4 using namespace std; 5 6 7 void eightcoin(int arr[]); 8 void compare(int a,in