求解兩個陣列中總體平均的差的絕對值和最小

2021-07-30 03:03:46 字數 1041 閱讀 8862

1.貪心策略:

由於需要最小化公式,所以對於a中的數需要求其在

b中差值最小的。由此的具體方案,對a和

b進行排序,這在

a中的第

i個數分配b中第

i個數進行求差值。

2.貪心選擇性:

給a中最小的數分配乙個b中最小的數,然後在剩餘的陣列中重複配對,就能得到最小的絕對差值和

證明:

取i,j 是a中最小和i!=j的兩個下標,且i下面分情況討論:

1.a[i]2.a[i]3.a[i]4.b[i]5.b[i]綜上所述abs<=abs',可得如果不按照貪心策略進行配對的話,則絕對差值不是最小的,因此要按照貪心策略進行配對,每次分配乙個最小的。

3.優化子結構:

當按照貪心策略配對後得到優化解abs,如果同時去除a和b中最大的兩個數k和t,abs'=abs-|k-t|是去除k和t的優化解

證明:

假設abs'是不是去除a和b中最大的k和t 的優化解,當加上k和t 兩個樹

後,根據貪心策略,優化解abs''=abs』+|k-t|,於是abs''等於abs,而abs是優化解,出現矛盾,所以當按照貪心策略配對後得到優化解c,如果同時去除a和b中最大的兩個數k和t,abs'=abs-|k-t|是去除k和t的優化解

4.偽**:

function getmin_sum_abs

sort(a);//這裡可以用時間複雜度為nlogn的演算法,比如快排

sort(b);//同上

sum = 0

for i=0 to a.length

sum+=abs(a[i]-b[i]);

return sum;

5.演算法複雜度:o(nlogn)

交換兩個陣列使兩個陣列和的差最小

有兩個陣列a,b,大小都為n,陣列元素的值任意整形數,無序 要求 通過交換a,b中的元素,使 陣列a元素的和 與 陣列b元素的和 之間的差最小。求解思路 當前陣列a和陣列b的和之差為 a sum a sum b a的第i個元素和b的第j個元素交換後,a和b的和之差為 a sum a a i b j ...

交換兩個陣列使兩個陣列和的差最小

有兩個陣列a,b,大小都為n,陣列元素的值任意整形數,無序 要求 通過交換a,b中的元素,使 陣列a元素的和 與 陣列b元素的和 之間的差最小。求解思路 當前陣列a和陣列b的和之差為 a sum a sum b a的第i個元素和b的第j個元素交換後,a和b的和之差為 a sum a a i b j ...

計算兩個陣列的差集

給你兩個分別有 5000 個元素的陣列,計算他們的差集 方案1迴圈第乙個陣列 判斷item是否在第二個陣列裡,如果在,則unset掉這個鍵,最後剩下的陣列就是差集 function array diff array 1,array 2 return array 1 方案2 最優 效率最快 將第二個陣...