模糊距離;及七夕鵲橋分析

紫鳳發表於2013-08-19

今日面試題:模糊距離

X和Y都是隻有0和1組成的字串。D(X,Y)稱為模糊距離,定義如下:

  • 首先刪除X和Y從頭開始的公共子串
  • 然後將X和Y剩下部分的長度相加得到模糊距離

例如D(1000,1111),首先,刪除子串“1”,然後剩下“000”和“111”長度都是3,相加為6,則D(1000,1111)=6。 例如D(101,1100),首先刪除公共子串“1”,然後剩下"01"和"100"長度分別為2,3,相加為5,則D(101,1100)=5。

問題是,給定n個只有0和1的字串,

如:

1111

1000

101

1100

...

請找到最大的模糊距離,字串總數為n,字串最長為m。

================================================

七夕鵲橋分析

原題

有n對喜鵲。每一對可以表示為(x,y),x、y是喜鵲的編號,並且任意一對,x總是小於y。(c,d)可以連線在(a,b)之後,當且僅當b< c 。多對喜鵲連線在一起,就構建成了鵲橋。給定n對喜鵲,請你構建最長的鵲橋,來幫助有情人相會。

分析

首先,要理解這個題目的意思。具體例子說明,給定下面的例子:

(15,40)  (5,8)  (1,10)  (30,31)  (34,35)  (9,20)  (36,37)  (2,4)

其中,(2,4)和(5,8)能夠連線起來,(5,8)和(9,20)能夠連線起來,則它們可以都連線起來,為(2,4)(5,8)(9,20)。這一段鵲橋,長度為3。依次類推,還有其他的情況。

然後,理解了題意,該如何解決呢?假設(a,b)(c,d)(e,f)是可以連線起來的三對喜鵲。則它們的關係如下: b < c,d< e,有根據a< b,c< d,e< f。得到,a< b< c< d< e< f,即b< d< f(a< c< e出發考慮,也是一樣的。)我們可以想象,以每一對喜鵲的第二隻編號為基準,進行排序,最終的結果,可以通過如下列表產生。

(2,4)  (5,8)  (1,10)  (9,20)  (30,31)  (34,35)  (36,37)  (15,40)

怎麼找到最長的鵲橋呢?其實就是在上表中,找到最長遞增子序列,只不過,在比較連個喜鵲對(a,b)(c,d)的時候,是b和c進行比較即可。這個時間複雜度是O(n^2)的。

可否在從方法的角度,進一步考慮呢?

大家思考一個問題,最長的鵲橋,是否會包括第一對喜鵲。我們假設,不包括第一對喜鵲。最長的鵲橋為s1,s2…sk。每一個si,可以表示為(xi,yi)。s0,(x0,y0)為第一對喜鵲。我們有y1 < x2, 並且 y0 < y1。y0last y 則保留,否則拋棄,最終留下來的,就是最長的鵲橋。如上面的例子,得到

(2,4)  (5,8)  (9,20)  (30,31)  (34,35)  (36,37)

長度為6。

後面這個思路,不夠嚴謹,沒有闡述嚴格的證明,但是存在的。留給大家思考吧。

為了美好的愛情,大家都盡力了麼?

【分析完畢】

本文來自微信:待字閨中,2013-08-15釋出,原創@陳利人 ,歡迎大家繼續關注微信公眾賬號“待字閨中”。

相關文章