【步驟】
i、(初始
int k = 0
),假定第
k數為最小
min;
2、然後將其與其他n-1
個數作比較,若有比
a[k]
小的,則兩數交換位置;
3、k++且
k;跳到步驟1
【具體演算法】
public static int selectsort(int array)
return array;
【分析】
i、輸入規模為陣列的大小n;
ii、基本操作為「比較」;
iii、「比較」的次數僅僅依賴於陣列的規模,所以不區分最優、最差效率;
iv、基本操作執行次數:
v、t(n) = o(n^2)
【步驟】
1、(初始
int k = 0
),作第
k次冒泡;
2、一次冒泡中,每兩個相鄰的數作比較,若序號大的數比序號小的數小,則交換位置,截止到下標為
n-2-k
的數;
3、k++且
k;跳到步驟1
【具體演算法】
public static int bubblesort(int array)
【分析】
i、輸入規模為陣列的大小n;
ii、基本操作為「比較」;
iii、「比較」的次數僅僅依賴於陣列的規模,所以不區分最優、最差效率;
iv、基本操作執行次數:
v、t(n) = o(n^2)
【步驟】
1、(初始
int k = 1
),作第
k趟插入;
2、一次插入排序中,待插入的數依次向下標小的方向掃瞄,找到合適的位置後,將該位置起的數依次向下標增大方向挪動乙個位置,然後將待插入的數插入到合適的位置;
3、k++且
k;跳到步驟1
【具體演算法】
public static int insertsort(int array)
array[j + 1] = insertnum;
} return array;
}
【分析】
i、輸入規模為陣列的大小n;
ii、基本操作為「比較」 array[j] > insertnum;
iii、「比較」的次數不僅依賴於陣列的規模,還依賴於特定的輸入;
iv、最壞效率(與選擇排序相等):
最優效率:
平均效率:約等於
public static int bruteforcestringmatch(string sourcestring, string pattern)
return -1;
}
【分析】
基本操作:比較;
最差效率:o(mn);
平均效率:θ(n)
【具體演算法】
public static int sequencesearch(listlist, t target)
【思路】
i、求出點集的每一線段
ax + by = c中的a
、b、c
值; ii、將其他
n-2個點代入
ax + by - c
中,檢查符號是否相同,此處一共有幾種情況回發生:
1)代入後為0
2)代入後為0
3)代入後,有符號不相同的情況,捨棄線段
4)代入後,符號都相同,則保留線段
【具體演算法】
/*array引數代表待求凸包的點集,用二維陣列表示,第一維表示的是x軸的數值,第二維表示的是y軸的數值 */
public static int bruteforce(int array); // 存放凸包極點和線段的陣列,陣列只有兩列,每行代表乙個線段,eg:a[0][0]=0,a[0][1]=1 表示的是端點為結點 0 和結點 1的線段
int value = new int[array.length]; //存放n-2個結點代入某一線段公式後的值
int valuekey = 0; //記錄value陣列的下標移動
// 初始化arrayresult陣列,由於arrayresult陣列存放的是凸包線段的端點的編號,所以arrayresult的行數就是線段數
if(array != null)
arrayresult = new int[array.length * (array.length - 1) / 2][2]; //凸包最多的線段數就是點集(n個結點)所能組成的最大線段數數 (n - 1) * n / 2
for(int i = 0; i < arrayresult.length;i++)
for(int j = 0; j < array[0].length; j++)
arrayresult[i][j] = -1;
//記錄除線段外的n-2個點代入線段公式後的符號是否相同,true為相同
boolean hassamesign = true;
double a = 0, b = 0, c = 0;
int resultarraykey = 0, k = 0;
//最外的兩層迴圈是蠻力算出點集中的所有可能線段,i和j代表點的編號
for(int i = 0; i < array.length - 1; i++)
for(int j = i + 1; j < array.length; j++)else if((value[valuekey] != 0))
else
valuekey++;
}
}if(hassamesign)
} return arrayresult;
}
【分析】
輸入規模:點集的點個數n
基本操作:點代入線段公式求值
時間效率:對於不同點的每乙個n(n-1)/2來說,要對其他(n-2)個點求出ax+by-c的符號,所以 t(n) = o()
排序演算法(一 基本介紹)
所謂排序,就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作。排序演算法,就是如何使得記錄按照要求排列的方法。排序演算法在很多領域得到相當地重視,尤其是在大量資料的處理方面。乙個優秀的演算法可以節省大量的資源。在各個領域中考慮到資料的各種限制和規範,要得到乙個符合實際的優秀...
SSD演算法原理介紹 一
ssd演算法介紹 ssd屬於one stage檢測方法,主要通過了直接回歸目標類別和位置的方式。在進行 時也正是由於通過不同尺度的特徵層上進行 所以在影象低解析度時也能很好的對目標進行檢測,保證其精度。在訓練的過程中採用了端到端的方式進行訓練。ssd網路結構 基礎網路使用了vgg16的網路結構,然後...
A 演算法介紹
不得不嘆服,強大演算法背後,都是簡單得不能再簡單的邏輯。普林斯頓的演算法課程作業裡,要讓用a 演算法。什麼都沒接觸到過,看到後有種想哭的感覺!於是網上查閱資料,漸漸的明白了怎麼回事。通過對a 演算法的學習的個人感悟 計算乙個代價函式,評估每一步的代價,並找到代價最小的方向。最終得到的解可能不是最優,...