給定乙個陣列a=[
ai
]a = [a_i]
a=[ai
],求它的最大值或最小值,一般會用遍歷查詢或排序的方法,但其實可以直接用計算的方法求出陣列的最大最小值。
m ax
(a)=
limn→
∞a1n
+⋯+a
nn
nmax(a) = \lim_\sqrt[n]
max(a)
=n→∞
limna
1n+
⋯+an
nmax
(a)=
limβ→
∞1
βlog(
eβa1
+⋯+e
βan)
min(
a)
=limβ
→−∞1
βlog(
eβa1
+⋯+e
βan)
max(a) =\lim_\frac\log \left(e^+\cdots +e^ \right)\\ min(a) =\lim_ \frac\log \left(e^+\cdots +e^ \right)
max(a)
=β→∞
limβ1
log(e
βa1
+⋯+e
βan
)min
(a)=
β→−∞
limβ1
log(e
βa1
+⋯+e
βan
)證明也很簡單。
下面用程式來說明:
import numpy as np
defmax1
(a):
n =100return
pow(np.
sum(a**n),1
/n)def
max2
(a):
beta =
10return np.log(np.
sum(np.exp(beta*a)))
/beta
a = np.array(
[i for i in
range(10
)])+
0.001
print
(a)print
(max1(a)
)print
(max2(a)
)'''
[1.000e-03 1.001e+00 2.001e+00 3.001e+00 4.001e+00 5.001e+00 6.001e+00 7.001e+00 8.001e+00 9.001e+00]
9.001000691258799
9.001004540096037
'''
需要注意的是,這種近似方法容易出現數值溢位,使用時須謹慎 求陣列的最大值最小值
演算法陣列中的最大值和最小值 方法1 遍歷兩次求出最大值最小值 時間複雜度n 2 方法2 相鄰兩個數分為一組比較,大的放在偶數字,小的放到奇數字,然後在偶數字上找到最大值,在奇數字上找到最小值n 1.5 方法3 定義兩個變數max,min值,相鄰兩個數分為一組,比較出最大值和最小值,最大值和max比...
分治法求陣列最大最小值
常規的做法是遍歷一次,分別求出最大值和最小值,但我這裡要說的是分治法 divide and couquer 將陣列分成左右兩部分,先求出左半部份的最大值和最小值,再求出右半部份的最大值和最小值,然後綜合起來求總體的最大值及最小值。這是個遞迴過程,對於劃分後的左右兩部分,同樣重複這個過程,直到劃分區間...
求陣列的最大值與最小值
方法1 通過迴圈查詢陣列的最大值和最小值 minn a 0 maxx a 0 for int j 0 j i j 方法2 利用c 自帶的函式 max element 和 min element include include using namespace std intmain cout max ...