Số điểm tối đa mà hai đường dẫn có thể đạt được


8

Giả sử chúng ta được cung cấp một danh sách n điểm, có tọa độ xy đều không âm. Giả sử cũng không có điểm trùng lặp. Chúng ta chỉ có thể đi từ điểm (xi,yi) đến điểm (xj,yj) nếu và . Câu hỏi là: với điểm này, số điểm tối đa chúng ta có thể đạt được là bao nhiêu nếu chúng ta được phép vẽ hai đường dẫn kết nối các điểm bằng quy tắc trên? Các đường dẫn phải bắt đầu từ điểm gốc và có thể chứa các điểm lặp lại. xixjyiyjn(0,0) tất nhiên là không bao gồm trong các điểm đạt được.

Một ví dụ: đã cho , câu trả lời là vì chúng ta có thể lấy(2,0),(2,1),(1,2),(0,3),(1,3),(2,3),(3,3),(2,4),(1,5),(1,6)8(0,0)(2,0)(2,1)(2,3)(2,4) và .(0,0)(1,2)(1,3)(1,5)(1,6)

Nếu chúng ta chỉ được phép vẽ một đường dẫn, tôi có thể dễ dàng giải quyết câu hỏi bằng lập trình động chạy trong . Trước tiên tôi sắp xếp các điểm bằng cách giảm . Đặt là số xu tối đa mà người ta có thể nhặt được từ xu đến trong danh sách được sắp xếp. Khi đó và . Câu trả lời sau đó chỉ là \ max \ terms_ {1 \ le i \ le n} D [i] + 1 .O(n2)xi+yiD[i]1iD[1]=1D[i]=max1j<i,xjxi,yjyiD[j]+1max1inD[i]+1

Nhưng tôi không thể đưa ra một mối quan hệ tái phát cho hai con đường. Nếu bất cứ ai có bất kỳ ý tưởng về mối quan hệ tái phát như vậy, tôi sẽ rất vui khi nghe những gì họ đang có.


Tôi sẽ sắp xếp các điểm theo từ vựng, nhưng tôi đoán nó không quan trọng. Bạn chắc chắn nên neo trong ; con đường tốt nhất có thể không sử dụng đồng tiền đầu tiên. Ngoài ra, cách bạn chọn kết quả cho thấy rằng đường dẫn tốt nhất phải sử dụng điểm cuối cùng. Hơn nữa, do cấu trúc khó chịu, vấn đề này dường như không phù hợp với DP. Tìm những con đường dài nhất trong DAG ngụ ý bởi các điểm sẽ có ý nghĩa hơn nhiều. D[0]
Raphael

Vâng, đối với một con đường, điểm cuối cùng không cần phải được đưa vào. Nếu đối với một số điểm không có điểm nào ở bên phải và phía trên của nó thì sẽ chỉ là . Tôi đoán tôi nên đã làm điều đó rõ ràng hơn mặc dù. D [ i ] 1iD[i]1
Aden Dong

Bạn có thể không chỉ đơn giản là chạy thuật toán hai lần, nhưng trong lần thứ hai loại bỏ tất cả các điểm chạm trong đường dẫn đầu tiên? Hoặc là một mối quan hệ tái phát duy nhất cần thiết?
edA-qa mort-ora-y

Câu trả lời:


4

Vấn đề, trình bày lại và khái quát hóa: đưa ra một tập hữu hạn được trang bị với một trật tự một phần , tìm chuỗi C 1 , C 2S tối đa hóa | C 1C 2 | . Câu hỏi đặt ra là về trường hợp S R 2 +( x , y ) ( z , w ) x z y wS C1,C2S|C1C2|SR+2(x,y)(z,w)xzyw .

Ngây thơ, người ta có thể cố gắng tìm chuỗi duy nhất tốt nhất trong , trong đó tốt nhất được đo bằng bao nhiêu giá trị riêng biệt mà các thành phần của chuỗi có. Thật không may, một thành phần có thể truy xuất các bước của thành phần khác, ví dụ: ( ( 0 , 0 ) , ( 0 , 0 ) ) < ( ( 1 , 0 ) , ( 0 , 0 ) ) < ( ( 2 , 0 ) , ( 0 , 0 ) )S2vì vậy khái niệm tốt nhất này không có cấu trúc tối ưu.

((0,0),(0,0))<((1,0),(0,0))<((2,0),(0,0))<((2,0),(1,0)),

Thay vào đó, chúng ta tìm kiếm chuỗi trong tập . Bằng cách yêu cầu các thành phần bằng nhau hoặc không thể so sánh được, chúng tôi ngăn chặn retracing nhưng bây giờ cần phải lập luận rằng một số chuỗi tốt nhất phù hợp với yêu cầu mới.T:={(x,y)(x,y)S2xyyx}

Bổ đề 1 (không rút lại). Hãy là một chuỗi và xác định C 1 : = { x | ( x , y ) C }C 2 : = { y | ( x , y ) C } . Đối với tất cả z S , chúng ta có z C 1CTC1:={x(x,y)C}C2:={y(x,y)C}zS khi và chỉ khi ( z , z )zC1C2 .(z,z)C

Bằng chứng. Hướng if là tầm thường. Trong chỉ khi hướng, cho tất cả , có tồn tại x , y S như vậy ( x , z ) , ( z , y ) C . Kể từ khi C là một chuỗi, ( x , z ) ( z , y ) ( z , y ) ( z )zC1C2x,yS(x,z),(z,y)CC(x,z)(z,y)(z,y)(x,z) . Giả sử đối xứng đó , trong đó hàm ý rằng x z y . Chúng tôi biết bằng cách định nghĩa của T rằng x z z y , vì vậy x = z = y , và ( z , z ) C(x,z)(z,y)xzyTxzzyx= =z= =y(z,z)C .

Bổ đề 2 (tồn tại chuỗi hạn chế tốt nhất). Đối với tất cả các chuỗi , tồn tại một chuỗi C TC 1{ x | ( x , y ) C } C 1C 2C 2{ y | ( x ,C1,C2SCTC1{x|(x,y)C}C1C2 .C2{y(x,y)C}C1C2

Bằng chứng (sửa đổi). Chúng tôi đưa ra một thuật toán để xây dựng . Để thuận tiện, xác định lính canh , < x < cho tất cả x S . Hãy C ' 1 : = C 1{ }C ' 2 : =C,<x<xSC1:=C1{} .C2:=C2{}

  1. Initialize x : = y : = . Một bất biến là x y y x .C:=x:=y:=xyyx

  2. Hãy là yếu tố tiếp theo của C 1 , có nghĩa là, x ' : = inf { z | z C ' 1x < z } . Hãy để y ' là yếu tố tiếp theo của C 2 , có nghĩa là, y ' : = inf { w | w C ' 2y < w } .xC1x:=inf{zzC1x<z}yC2y': =thông tin{w|wC2'y<w}

  3. Nếu , thiết lập ( x , y ) : = ( x ' , y ' ) và đi đến bước 9.x'y'y'x'(x,y): =(x',y')

  4. Nếu , thiết lập ( x , y ) : = ( x ' , x ' ) và đi đến bước 9.y<x'<y'(x,y): =(x',x')

  5. Nếu , bộ x : = x ' và đi đến bước 9. Lưu ý rằng x < x 'x yyx'<y'x: =x'x<x'xy ngụ ý rằng .x'y

  6. Nếu , thiết lập ( x , y ) : = ( yx<y'<x' và đi đến bước 9.(x,y): =(y',y')

  7. Nếu , bộ y : = y ' và đi đến bước 9. Lưu ý rằng y < y 'y xxy'<x'y: =y'y<y'yx ngụ ý rằng .y'x

  8. Bước này không bao giờ đạt được, vì các điều kiện cho các bước 3 Ném7 là đầy đủ.

  9. Nếu (tương đương, y ), bộ C : = C { (xy và đi đến bước 2.C: =C{(x,y)}

Chương trình động. Đối với tất cả , tính toán D [ x , y ] : = sup ( { D [ z , w ] + [ x z ] + [ y w ] - [ x = y ] | ( z , w ) T ( z ,(x,y)T nơi [ điều kiện ] = 1 nếu điều kiện là đúng và [ điều kiện ] = 0 nếu điều kiện là sai. Theo bổ đề 1, theo sau các biểu thức ngoặc sẽ đếm chính xác số lượng phần tử mới. Theo bổ đề 2, giải pháp tối ưu cho vấn đề ban đầu được tìm thấy.

D[x,y]: =bữa tối({D[z,w]+[xz]+[yw]-[x= =y]|(z,w)T(z,w)<(x,y)}{2-[x= =y]}),
[tình trạng]= =1tình trạng[tình trạng]= =0tình trạng

Đẹp. Tôi đã không kiểm tra từng chi tiết, mặc dù. Chào mừng đến với cs.SE!
Raphael

0

Hãy vào danh sách được sắp xếp điểm.P= =p1Giáo dụcpn


Theo dõi sự tái phát của bạn cho một con đường, điều đầu tiên cần lưu ý là bạn phải theo dõi những điểm nào đã được truy cập bởi các đường dẫn; nếu không bạn không thể đếm chính xác. Điều thứ hai là bây giờ bạn đã có bốn khả năng cho mọi điểm: không đường nào có thể sử dụng nó, một trong hai hoặc cả hai. Vì vậy, chúng ta phải tìm ra sự kết hợp tối đa cho cả ba trường hợp.

Chính thức, chúng ta hãy với d ( i ) các cặp (bộ) nút thăm của hai con đường đó tối đa hóa số lượng điểm truy cập từ các đầu vào thiết lập để các i thứ một, với thành phần đầu tiên cặp tối đa hóa các đường dẫn mà người đầu tiên sử dụng p i , thành phần thứ hai tương tự cho con đường thứ hai và các thành phần thứ ba với cả hai con đường sử dụng p i . dd:[0Giáo dụcn](2[n]×2[n])3d(Tôi)TôipTôipTôid được đưa ra bởi sự tái phát

d(0)= =((,),(,),(,))d(Tôi)= =( tranh luậntối đa(L,R)(L'×R)Tôi|LR|,= =( tranh luậntối đa(L,R)(L×R')Tôi|LR|,= =( tranh luậntối đa(L,R)(L'×R')Tôi|LR| )

với

(L'×R)Tôi= ={(L{Tôi},R)|(L,R)j= =0Tôi-1d(j),xTôitối đajLxj,yTôitối đajLyj}

(L'×R)TôiR(L'×R')TôiLR .

Không cần phải nói, điều này không phải là rất tốt đẹp. Điều này là do vấn đề không cho vay lập trình động rất tốt: bạn không thể kết hợp nhiều giải pháp một phần vì không có tổng thứ tự tốt cho các điểm và bạn không thể loại bỏ kết quả trung gian vì lý do tương tự.


G= =(V,E,w)

  • V= ={(0,0),p1,Giáo dục,pn,(X,Y)}X= =tối đaxTôiY= =tối đayTôi
  • E= ={((x1,y1),(x2,y2))V2|xTôixj,yTôiyj}
  • w(v1,v2)= ={0,v2= =(X,Y)1, khác

(v1,v2)(v1,Giáo dục,v2) , vì dùng "phím tắt" như vậy là không bao giờ tốt hơn thuận lợi.

P*(0,0)(X,Y)wP*0P+P*P+Ôi(|V|+|E|)Ôi(n2)


Tôi có thể đã hiểu sai những gì bạn đã viết, nhưng đối với biểu đồ chu kỳ có hướng có trọng số, điều đó có nghĩa là chúng ta có thể chỉ cần tìm đường đi dài nhất trước, sau đó xóa tất cả các cạnh trong đường dẫn dài nhất và tìm đường dẫn dài nhất trong biểu đồ còn lại?
Aden Dong

0
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.