演算法介紹(一)

2021-07-10 21:00:30 字數 3078 閱讀 4984

【步驟】

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 演算法的學習的個人感悟 計算乙個代價函式,評估每一步的代價,並找到代價最小的方向。最終得到的解可能不是最優,...