演算法設計與分析學習筆記(一)

2021-10-03 07:23:18 字數 2125 閱讀 3595

輸入包含n個整數是陣列a和整數x,求出滿足a[i] + a[j] = x的i和j,如果沒有這樣的元素和,則返回-1,否則返回1
//暴力法

思路:設定兩個for迴圈,第乙個設定基準數,然後利用已知數x減去基準數之後,

再使用乙個for迴圈來進行匹配減去得到的數,如果存在該數,則返回1.如果不存在,

則繼續找下乙個基準數,直到可找的基準數沒有,如果最後還是沒有,則返回-1;

時間複雜度:o(n*2)

int

funtion1

(int a,

int n,

int x)

//二分法

思路:首先對整個陣列進行排序,這時採用二分形式進行查詢,是否存在a[i]+a[j]=x

如果a[i]+a[j]>x; 則a[j]較大,這時j–

如果a[i]+a[j]int

funtion2

(int a,

int n,

int x)

else

if(a[i]

+a[j]

>x)

else

}return-1

;}//hash法

思路:將陣列中的資料存在hash表中,然後查詢x-a[i]是否存在hash表中

時間複雜度o(n)

int

funtion3

(int a,

int n,

int x)

for(

int i=

0;i(hash[x-a[i]]==

1)return1;

return-1

;}

執行結果:

int

main()

;int x=12;

printf

("%d\n"

,funtion1

(a,10,12

));if

(funtion1

(a,10,12

)==1)

else}1

存在數值對

----

----

----

----

----

----

----

----

process exited after 2.753 seconds with return value 0

請按任意鍵繼續.

..

求包含n個整數的陣列a的第i小的數。
冒泡法:

思路:使用氣泡排序,小的冒出水面,當進行到第i個數時,返回該數

最大時間複雜度 o(n)

最小時間複雜度 o(1)

int

funtion2

(int a,

int n,

int x)

return a[n-x-1]

;}

//暴力法

思路;

先從小到大排序,在尋找第i位置的數

時間複雜度: o(n)

int

funtion1

(int a,

int n,

int x)

執行結果:

int

main()

;int x =3;

printf

("%d"

,funtion2

(a,10,4

));}

5------

----

----

----

----

----

----

--process exited after 2.123 seconds with return value 0

請按任意鍵繼續.

..

演算法設計與分析筆記(一)

遞迴與分治策略 遞迴的概念,典型應用 hanoi問題,程式如下 include void hanoi int n,char a,char b,char c void main 分治的基本思想 將乙個規模為n的問題分解成k個規模較小的子問題,然後遞迴解決這些問題。二分搜尋技術 include defi...

演算法分析與設計學習筆記1

下面哪乙個不是演算法的特性?同乙個數學模型使用不同的資料結構會有不同的演算法,有效性有很大差別 計算此偽 表示的演算法中加法的執行次數 答案 2t 1 1 解析 此類問題適合初學者進行練習,初學者接觸此類問題最好找從頭到尾梳理一遍,將題中所給資料帶入所給偽 中進行計算來梳理思路。運算過程 n最開始為...

演算法分析與設計學習筆記 5

貪心演算法 在求最優解問題的過程中,依據某種貪心標準,從問題的初始狀態出發,直接去求每一步的最優解,通過若干次的貪心選擇,最終得出整個問題的最優解,這種求解方法就是貪心演算法。從貪心演算法的定義可以看出,貪心演算法不是從整體上考慮問題,它所做出的選擇只是在某種意義上的區域性最優解,而由問題自身的特性...