做題時,遇到了這個問題,順手記錄一下。(~ ̄▽ ̄)~
問題描述
假設我們有n個直徑各不相同的螺釘以及n個相應的螺母。我們一次只能比較一對螺釘和螺母,來判斷螺母是大於螺釘 、小於螺釘還是正好適合螺釘。然而,我們不能拿兩個螺母作比較,也不能拿兩個螺釘作比較。我們的問題是要找到每一對匹配的螺釘和螺母。為該問題設計乙個演算法,它的平均效率必須屬於集合θ(nlogn)。
思路
這個問題比較迷惑的地方就是螺母之間、螺釘之間不能比較。但說真的,螺釘是與螺母是相互對應的,螺釘與螺母比實際上就可以看做是螺母之間在比。nlogn又讓人想到快排,很明顯這就是是兩組快排。
從螺釘中選出乙個,對螺母們進行劃分成三部分,比這個螺釘小的、大的和相等的。
取出第一步相等的螺母,對螺釘們進行相同的劃分。
對小的部分,和大的部分,進行遞迴操作。
**
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
namespace zexercise
static
intsort
(ref
int[
] a,
refint i,
refint j,
int pivot)
while
(a[j]
> pivot)
swap
(ref a, i, j);}
i++; j--
;return a[i -1]
;}static
void
match
(ref
int[
] nuts,
refint
bolts,
int low ,
int high)
if(j > low)
}static
void
show
(int
a,int len)
console.
writeline(""
);}static
void
main
(string
args)
;int
bolts =
;match
(ref nuts,
ref bolts,0,
9); console.
writeline
("nuts:");
show
(nuts,10)
;
console.
writeline
("bolts:");
show
(bolts,10)
; console.
readkey()
;}}}
執行結果
水平有限,如有錯誤,請多包涵 (〃『▽』〃)
螺釘螺母的匹配問題
螺釘螺母的匹配問題 很早之前就看到一道關於螺釘螺母的acm題目的。最近又看了 分治法 的思想,於是強迫自己去把這個 寫出來!題目如下 給你一堆螺母和螺帽,每個螺母都有乙個相對應的螺帽,但是他們之間的對應關係已經打亂。你可以比較螺母和螺帽的大小關係,但是你無法比較螺母和螺母的大小關係,你也無法比較螺帽...
演算法 螺絲螺母問題
給你一堆螺母和螺帽,每個螺母都有乙個相對應的螺帽,但是他們之間的對應關係已經打亂。你可以比較螺母和螺帽的大小關係,但是你無法比較螺母和螺母的大小關係,你也無法比較螺帽和螺帽的大小關係。設計乙個演算法,找出螺母和螺帽的對應關係。include include using namespace std v...
分治演算法求螺絲螺母匹配問題
有個大小不同的螺絲和與之匹配的n個螺母,你可以嘗試乙個螺絲和乙個螺母是否匹配,嘗試結果有三種 1 螺絲太大 2 匹配成功 3 螺母太大.請設計乙個分治演算法完成所有螺絲和螺母的匹配 邊界條件 當只有乙個螺絲和乙個螺母時,匹配螺絲和螺母。divide 在杯子集合中隨機選擇乙個螺絲x,將x與所有螺母進行...