蠻力法

蠻力法:是一種簡單直接地解決問題的方法,常常直接給予問題的描述和所涉及的概念定義。

1.       選擇排序

算法:

SelectionSort(Array a)

//該算法用選擇排序對給定數組排序

//輸入:一個可排序數組 A[0,1,….n-1]

//輸出:一個已排序數組 A[0,1,….n-1](升序)

for  i <—0 to n-1 do

           min<— i

           for  j <—i to n-1

            if(A[j]<A[min])

                    min=j

           swapA[i] and A[min]

實現:

void selectionSort(double a[],int iLen)

{

     for(int i=0;i<iLen;++i)

     {

         int min=i;

         for(int j=i;j<iLen;++j)

              if(a[j]<a[min])

                   min=j;

         {

              double temp=a[i];

              a[i]=a[min];

              a[min]=temp;

         }

     }

}

2.     冒泡排序

算法:

BubbleSort(Array a)

//該算法用冒泡排序對給定數組排序

//輸入:一個可排序數組A[0,…..n-1]

//輸出:一個已排序數組 A[0,…..n-1]

for i<- n-1 to 1

     forj<- 0 to i-1

          ifa[j]>a[j+1]

               swapa[j] and a[j+1]

實現:

void bubleSort(double a[],int iLen)

{

     for(int i=iLen-1;i>0;–i)

     {

         for(int j=0;j<i;++j)

         {

              if(a[j]>a[j+1])

              {

                   double temp=a[j];

                   a[j]=a[j+1];

                   a[j+1]=temp;

              }

         }

     }

}

3.       順序查找

算法:

seqSearch(Array a, Key k)

//該算法用順序查找來找出某個鍵值時候在數組中

//輸入:一個n元素的數組a和一個查找鍵k

//輸出:第一個鍵值等於k的元素的位置,否則返回-1

for i<— 0 to n-1do

           if  a[i]=k

                    returni

return -1

實現:

int seqSearch(inta[],int iLen,int iKey)

{

     for(int i=0;i<iLen;++i)

         if(a[i]==iKey)

              return i;

     return-1;

}

4.     蠻力字符串匹配

算法:

bruteForeStringMatch(Array a , Array b)

//該算法用蠻力法對字符串進行匹配

//輸入:一個由n個字符的數組 a[0,….n-1]代表一段文本

       一個有m個字符的數組 b[0,…m-1]代表一個模式

//輸出:成功就返回第一個匹配子串的第一個字符的位置,失敗返回-1

for i<- 0 to n-1 do

     j<-0

     whilej<m and a[i+j]=b[j] do

          j<-j+1

     ifj=m

          returni

return -1

實現:

int bruteForceStringMatch(char a[],int iLenA,char b[],int iLenB)

{

  for(int i=0;i<iLenA-iLenB;++i)

  {

       int j=0;

       while(j<iLenB&&a[i+j]==b[j])

            ++j;

       if(j==iLenB)

            return i;

  }

  return -1;

}

5.     最近對問題

算法:

bruteForceClosestPoint( P)

//使用蠻力算法求出最近的兩個點

//輸入:包含n個點的點集P={(x0,y0),(x1,y1)…..(xn-1,yn-1)}

//輸出:距離最近的頂點對的索引 index1,index2

dmin<- ∞

index1<- 0

index2<-0

for i<- 0 to n-2 do

     forj<-i+1 to n-1 do

          dTemp<-(xi-xj)^2+(yi-yj)^2

          if(dTemp<dmin)

               dmin<-dTemp

               index1<-i

               index2<-j

return (index1,index2)

6.     凸包問題

算法:

bruteForceOuter(Vertexs)

//使用蠻力法求出凸包的邊(頂點對)

//輸入:包含n個點的點集V={(x0,y0),(x1,y1)…..(xn-1,yn-1)}

//輸出:無(打印出頂點對)

for i<-0 to n-2 do

     forj<-i+1 to n-1 do

          a<-yj-yi

          b<-xi-xj

          c<-xj*yi-xi*yj   //ax+by+c=0

          k<-0

          flag<- 0

          tempFlag<-0

          fork<-0 to n-1 do

               tempFlag<-a*xk+b*yk+c

               ifflag=0 and tempFlag!=0

                   flag<-tempFlag

               elseif flag!=0 and tempFlag!=0

                   flag*tempFlag<0

                        break;

          ifk=n

               print(xi,yi),(xj,yj)

//下面3個問題都可以通過窮舉法來解決

7.     旅行商問題

8.     揹包問題

9.     分配問題

点赞