Số lượng chuyến đi mua sắm tối thiểu cho một nhóm người để mua quà cho nhau


10

Chúng tôi có một nhóm n người. Chúng tôi được cung cấp một danh sách những người phải mua quà cho ai trong nhóm. Mỗi người có thể cần mua / nhận bất kỳ số lượng quà tặng, hoặc có thể không có gì cả. Trong một chuyến đi mua sắm, một tập hợp con người cùng đi đến cùng một cửa hàng và mua quà cho bất cứ ai không có mặt tại cửa hàng. Họ có thể không mua quà cho người khác trong cùng chuyến đi mua sắm vì điều đó sẽ không gây ngạc nhiên. Một người có thể đi nhiều chuyến mua sắm. Chúng tôi muốn giảm thiểu tổng số chuyến đi mua sắm cần thiết cho mọi người để mua tất cả những món quà họ cần.

Ví dụ, hãy xem xét trường hợp có 5 người và mỗi người phải mua quà cho mọi người khác trong nhóm. Hãy để mọi người được đánh số từ 1 đến 5. Điều này có thể được thực hiện trong 4 chuyến mua sắm, như được hiển thị:

  • Chuyến đi 1: 1, 2, 3 đi mua sắm

  • Chuyến đi 2: 1, 4, 5 đi mua sắm

  • Chuyến đi 3: 2, 4 đi mua sắm

  • Chuyến đi 4: 3, 5 đi mua sắm

Làm thế nào tôi sẽ đi về giải quyết vấn đề này? Rõ ràng là đầu vào có thể được biểu thị bằng đồ thị có hướng, nhưng tôi không biết phải đi đâu từ đó. Ai đó đã đưa ra vấn đề bìa biclique , nhưng trong khi tương tự, nó không trả lời câu hỏi này.

Chúng tôi có thể nghĩ đến đầu vào như một đồ thị có hướng trên n đỉnh, nơi rìa ( u , v ) có nghĩa là người đó u phải mua một món quà cho người v . Mục đích là để tìm một bộ bicliques ( S 1 , T 1 ) , ... , ( S k , T k )k là tối thiểu và cạnh bộ E của đồ thị là một tập hợp con của i ( S i × T TôiGn(u,v)uv(S1,T1),,(Sk,Tk)kE . Ngoài ra, trong việc mở rộng định nghĩa của xe đạp sang đồ thị có hướng, một biclique ( S i , T i ) chỉ chứa các cạnh mà ánh xạ S i đến T i . Điều này khác với vấn đề bao gồm biclique ở chỗ chúng tôi không yêu cầu mỗi biclique phải là một sơ đồ con của G (chúng tôi không yêu cầu S i × T iE cho mỗi i ).i(Si×Ti)(Si,Ti)SiTiGSi×TiEi

Cụ thể, tôi sẽ chấp nhận một câu trả lời rằng:

  • Chứng tỏ rằng vấn đề này là NP-hard hoặc
  • Trình bày một thuật toán thời gian đa thức trả lời chính xác câu hỏi này (không có giá trị gần đúng hoặc giới hạn trên)

Đối với hồ sơ, tôi không thấy vấn đề này ở bất cứ đâu, tôi chỉ tự hỏi về nó vì sự tò mò của riêng tôi.

Câu trả lời:


2

Vấn đề này là NP-hard . Để thể hiện điều này, trước tiên tôi sẽ cải tổ vấn đề (tối ưu hóa) này thành vấn đề quyết định. Sau đó, tôi cải tổ vấn đề đó thành một vấn đề tương đương, từ đó khá đơn giản để có được sự giảm bớt từ vấn đề -coloring, NP-hard cho bất kỳ k 3 nào .kk3

Một công thức ngắn của vấn đề là như sau:

Cho người và một biểu đồ G mã hóa các mối quan hệ 'tặng quà' của họ, hãy tìm số lượng chuyến đi tối thiểu cần thiết để có thể mua tất cả quà tặng mà không làm hỏng bất kỳ sự ngạc nhiên nào.nG

Tuy nhiên, đây là một vấn đề tối ưu hóa. NP lớp thường được định nghĩa cho các vấn đề giải trừ (trong đó câu trả lời cho mọi trường hợp là CÓ hoặc KHÔNG). Một biến thể quyết định của điều này là:

Với người và một đồ thị G mã hóa của họ 'tặng quà' quan hệ và một số nguyên t , đang thực hiện ở hầu hết các t chuyến đi đủ để mua tất cả những món quà mà không làm hỏng bất kỳ bất ngờ?nGtt

Tôi xác định vấn đề của việc tìm kiếm một đạo diễn thích hợp -multicoloringt của một số đồ thị như việc tìm kiếm một chức năng nhiều màu c : V P ( C ) mà là thích hợp , nơi C là một số thiết lập của t 'màu sắc' ( tức là | C | = t ) và P ( C ) là tập hợp sức mạnh của C (tức là tập hợp tất cả các tập con của CG=(V,E) c:VP(C)Ct|C|=tP(C)CC(uv)Ec(u)c(v)

Tôi cho rằng vấn đề chuyến đi mua sắm là tương đương với vấn đề quyết định sự tồn tại của một đạo diễn -multicoloringt của cùng một đồ thị .G

Bằng chứng : Nếu chúng ta có một đạo diễn thích hợp -multicoloring cho , nơi mà chúng tôi đổi tên các màu sắc như vậy sau đó xem xét trình tự của chuyến đi , nơi một đỉnh đi mua sắm trong chuyến đi khi và chỉ khi . Sau đó, với mọi cạnh , chúng ta có tồn tại một chuyến đi sao cho và , vì . Do đó, những chuyến đic G C = { 1 , ... , t } t T 1 , ... , T t v T i i c ( v ) ( u v ) E T i u T i v T i c ( u ) c ( v ) T itcGC={1,,t}tT1,,TtvTiic(v)(uv)ETiuTivTic(u)c(v)Ti là đủ để mua tất cả quà tặng.

Nếu chúng ta có một chuỗi các chuyến đi , thì hãy xây dựng hàm đa màu trên tập màu sao cho . Sau đó, với mọi cạnh , tồn tại một chuyến đi sao cho và (vì có thể mua quà cho trong một chuyến đi), điều đó có nghĩa là và , vì vậy . c C = { 1 , ... , t } c ( u ) = { i N | u T i } ( u v ) E T i u T i v T i u v i c ( u ) i c (T1,,TtcC={1,,t}c(u)={iN|uTi}(uv)ETiuTivTiuvic(u)c ( u ) c ( v ) ic(v)c(u)c(v)

Tìm kiếm một -multcoloring đúng hướng về cơ bản là một sự cải tổ kỳ lạ của một trường hợp cụ thể của -coloring. Do đó, tôi có thể hiển thị việc giảm thời gian đa thức từ vấn đề tô màu: Đưa ra biểu đồ vô hướng , trước tiên hãy chuyển đổi biểu đồ này thành đồ thị có hướng , sao cho và khi và chỉ khi hoặc ( nói cách khác, chúng ta thay đổi các cạnh vô hướng thành hai cạnh có hướng).ktk(tt/2)G = ( V , E ) V = V ' ( u v ) E ( u , v ) E ' ( v , u ) E 'G=(V,E)G=(V,E)V=V(uv)E(u,v)E(v,u)E

Hãy xem xét một tập hợp lớn nhất , sao cho không tồn tại , , sao cho . Tập hợp tất cả các tập hợp con của có kích thước , trong đó, là một bộ như vậy. Do đó, kích thước tối đa của một tập hợp con như vậy là .a , b K a b a b C t / 2 t = | C | ( tKP(C)a,bKababCt/2t=|C|(tt/2)

Nếu tồn tại một màu thích hợp cho , thì tồn tại một màu thích hợp sử dụng không quá các phần tử không bằng nhau từ (*) , vì vậy đây là lệ - tô màu cho .G ( ttG P(C) ( t(tt/2)P(C)  G'(tt/2)G

Nếu một thích hợp tồn tại cho , thì tồn tại một tập hợp , , sao cho và không tồn tại bất kỳ , , sao cho . Vì vậy, có một -multoloring đúng hướng . G'KP(C)| C| =t| K| ( t(tt/2)GKP(C)|C|=t a,bKababGt|K|(tt/2)a,bKababGt

Do đó, đây là việc giảm thời gian đa thức hợp lệ từ tô màu cho vấn đề mua sắm hiện tại với các chuyến đi , có nghĩa là vấn đề mua sắm hiện tại là NP-hard. Lưu ý rằng vấn đề mua sắm hiện nay là NP-đầy đủ, vì chúng ta có thể xác minh một cách dễ dàng nếu một danh sách nhất định ở hầu hết các các chuyến đi cho phép chúng tôi để mua tất cả những món quà mà không làm hỏng bất ngờ. tt(tt/2)tt


(*): Nếu một số đa màu sử dụng nhiều bộ màu hơn so với đa màu 'không phụ' tối đa , chúng ta có thể 'đổi tên' sao cho nó là siêu ký tự của . vẫn đúng, vì không có phần tử nào trong liền kề với một phần tử khác với là một vấn đề và không có phần màu nào được đặt liền kề nhau bản gốc . Vì vậy, không mất tính tổng quát, chúng ta có thể giả sử .C * C C * C C * C * C C *CCCCCCCCCCC

Sau đó, lưu ý rằng 'đổi tên' thành bất kỳ tập hợp con nào của không làm hỏng các cạnh giữa các nút của bộ màu , vì không chứa phần tử nào là tập con của phần tử khác. Điều duy nhất còn lại là đảm bảo rằng các cạnh giữa và không 'phá hỏng' màu.C * CC * C * CC * C *CCCCCCCCC

Hãy xem xét mối quan hệ sau đây trên các bộ màu trong : hai bộ màu và được kết nối khi và chỉ khi tồn tại một cặp đỉnh sao cho có màu sắc thiết lập và màu bộ và . Mối quan hệ này có thể được biểu thị bằng đồ thị vô hướng .CC A B a , b a A b B ( a , b ) E G = ( CC , R )RCCABa,baAbB(a,b)EG=(CC,R)

Đầu tiên, chúng ta có thể 'giảm' bằng cách thay thế bất kỳ cặp nào không có cạnh trong bằng một bộ màu duy nhất. Màu sắc vẫn phù hợp, vì việc thay đổi hai màu hoàn toàn không liền kề thành cùng một màu sẽ không đưa ra bất kỳ cạnh không hợp lệ nào. Kết quả là, chúng tôi đã giảm thành một biểu đồ hoàn chỉnh.G GCCGG

Điều này có nghĩa là nếu có số lượng bộ màu ít hơn hoặc bằng nhau là, màu sắc yêu cầu tồn tại. Mặt khác, hoàn toàn không tồn tại nhiều màu thích hợp, vì là tập hợp 'không tập hợp con' lớn nhất, vì vậy chúng tôi không thể tô màu cho cụm này. Do đó, đa màu cần thiết tồn tại.| C| C *G|C|C


Như đồ thị đầy đủ về các nút là màu thể khi và chỉ khi chúng ta có ít nhất màu sắc, chúng tôi có mà mọi người có thể đi mua sắm quà cho nhau trong chuyến đi khi và chỉ khi . Điều này có nghĩa đặc biệt là, nếu , chỉ thực hiện chuyến là đủ. Nếu có ít quà để mua, sẽ không cần nhiều chuyến đi hơn, vì vậy đây là giới hạn chung trên mọi giải pháp.K n n n t ( tnKnnntn12.87016(tt/2)nn1287016


Dưới đây là 'câu trả lời' trước đây của tôi, đưa ra thuật toán heuristic không đảm bảo để có được mức tối ưu, nhưng có thể được tính trong thời gian đa thức.

Một cách khác để hình thành vấn đề này là tìm của đồ thị lưỡng cực trên các phân vùng cho một số đồ thị có hướng với nút , sao cho số lượng phân vùng (tức là các chuyến đi), ở đây , là tối thiểu.( S i , T i ) G n mC={(S1,T1),,(Sm,Tm)}(Si,Ti)Gnm

Đầu tiên, một số quan sát, một phần đến từ các câu trả lời khác:

  • Chiến lược tham lam, trong đó chúng tôi chọn một với biểu đồ lưỡng cực trong đó số cạnh chung với là tối đa, không dẫn đến một giải pháp tối ưu (Ví dụ phản đối mạnh là biểu đồ đầy đủ có nút, trong đó chiến lược này thất bại, bất kể biểu đồ lưỡng cực tối đa nào được chọn.).G 6(Si,Ti)G6
  • Chiến lược tham lam không tối ưu cho các biểu đồ chu kỳ tùy ý, hãy xem xét biểu đồ sau: khó tính Cả hai cho và biểu đồ lưỡng cực loại bỏ cạnh, nhưng chỉ là tối ưu.S i = { 1 , 3 , 6 } 4 { 3 , 5 , 6 }Si={3,5,6}Si={1,3,6}4{3,5,6}
  • Bất kỳ thuật toán tham lam (tối ưu) nào cũng không thể thích kích thước của phân vùng được chọn hơn số lượng chu kỳ ( kích thước bất kỳ ) 'bị loại bỏ bởi phân vùng. Để thấy điều này, hãy xem xét biểu đồ với nút, trong đó có một chu kỳ của nút và mỗi nút trong chu trình có thêm cạnh đi về phía nút bổ sung , không có cạnh đi ra (Xem hình bên dưới để biết một ví dụ trong đó ). Một lựa chọn tham lam thích tối đa hóa số lượng cạnh trong các chu kỳ có độ dài sẽ gửi tất cả các đỉnh trong chu kỳ trong chuyến đi đầu tiên. Điều này là tối ưu, vì điều này không loại bỏ bất kỳ cạnh nào của chu kỳ và chỉ cần bỏ quan 2 2 A , B n = 4 n A , B A , Bn+2n22A,Bn=4nA,Bvà loại bỏ tất cả các cạnh từ chu trình loại bỏ tất cả các cạnh đối với là tốt. Vì vậy, bất kỳ lựa chọn tham lam nào thích kích thước của phân vùng hơn là loại bỏ một chu kỳ là không tối ưu.A,B
    4 chu kỳ

Dựa trên những quan sát này, tôi đề xuất lựa chọn tham lam sau: Chọn sao cho số lượng chu kỳ mà chuyến đi này 'loại bỏ' khỏi là tối đa và trong trường hợp quan hệ, hãy chọn một phân vùng có chồng chéo tối đa với trong số chúng (tức là nhìn vào các cạnh không theo chu kỳ).G G(Si,Ti)GG

Vì thuật toán này không khác với chiến lược tham lam 'cơ bản' trên các đồ thị chu kỳ (loại bỏ một lượng cạnh tối đa trên mỗi chuyến đi), do đó thuật toán tham lam này không tối ưu. Tuy nhiên, trực giác loại bỏ các chu kỳ vẫn có ý nghĩa và là một cải tiến so với chiến lược tham lam cơ bản, vì vậy nó có thể là một heuristic đàng hoàng.


1
Bạn nêu "Nếu một màu tồn tại cho , thì màu này sử dụng không quá các phần tử không bằng nhau từ ". Tuyên bố này là sai. Trong ví dụ tầm thường của 3 nút bị ngắt kết nối tồn tại một nhiều màu , trong đó . Đây là một màu 2 màu thích hợp sử dụng nhiều hơn phần tử riêng biệt. Có phải bạn muốn nói "Nếu một màu tồn tại cho , thì một màu như vậy sử dụng không quáG ( ttG(tt/2)P(C)a,b,cvv(a)={1},v(b)={2},v(c)={1,2}(21)=2tG(tt/2)các phần tử không bằng nhau từ "?P(C)
Riley

Thật vậy, đó là những gì tôi muốn nói. Một cách khác để nhìn vào nó là nếu nó là một tối thiểu t-multicoloring (ví dụ này không phải là -multicolorable), nó sử dụng chính xác các yếu tố . Rõ ràng, ví dụ bạn đưa ra không phải là một ví dụ cho việc cải cách chính xác. G(t1)(tt/2)
Thằn lằn rời rạc

Không chờ đợi. Nó không sử dụng chính xác các phần tử , nhưng nhiều nhất là. (tt/2)
Thằn lằn rời rạc

Tôi có thể hiểu làm thế nào mà tuyên bố sửa đổi có ý nghĩa trực quan, nhưng bạn có thể chứng minh nó? Có lẽ bạn có thể bằng cách nào đó cho thấy rằng bất kỳ đa sắc độ nào cũng có thể được "cải thiện" để tất cả các đa sắc là các phần tử của một số bộ đáp ứng yêu cầu về kích thước và không tồn tại sao cho . Ka,bKab
Riley

@Riley Tôi không chắc ý của bạn là gì, bạn muốn tôi giải thích câu nào? Tôi đã cập nhật câu trả lời của mình sao cho nó nêu ý kiến ​​ban đầu của bạn. Phần còn lại của bằng chứng vẫn không bị ảnh hưởng. Đối với mối quan hệ của vấn đề màu đa và nguyên bản, ý tưởng chính là đa màu có thể được xem là không có 'tập con' liền kề. Vì tập hợp con 'không ghép đôi' lớn nhất của có kích thước , chúng tôi cũng có thể coi đó là tập hợp màu và chúng tôi nhận được vấn đề tô màu. P(C)(tt/2)
Thằn lằn rời rạc

2

Tôi có thể thấy cách giảm vấn đề này thành Vẽ màu , cung cấp cho bạn một công cụ để giải quyết vấn đề (đối với các trường hợp nhỏ!), Nhưng chưa làm thế nào để giảm theo hướng khác (sẽ thiết lập độ cứng NP).

Ý tưởng cơ bản là xây dựng một biểu đồ chứa một đỉnh cho mỗi lần mua và cạnh giữa hai lần mua không thể xảy ra trong cùng một chuyến đi; sau đó chúng tôi tìm cách nhóm các giao dịch mua thành số nhóm nhỏ nhất có thể ("chuyến đi"), sao cho không có hai giao dịch mua trong cùng một nhóm xảy ra xung đột. Cụ thể, nếu là gốc của đạo đồ thị trong đó một cạnh chỉ ra người đó cần phải mua người một món quà, sau đó tạo ra một đồ thị vô hướng , trong đó có một đỉnh cho mỗi cạnh trong và cạnh (không xác định) bất cứ khi nàoG=(V,E)uvuvH=(X,Y)xuvuvGxuvxvwuv và đều (đạo diễn) cạnh trong (nếu mua một số một món quà trong một chuyến đi, sau đó không ai có thể mua một món quà trong cùng chuyến đi đó). Màu đỉnh của là phân vùng mua hàng cần thiết (đỉnh trong ) thành các chuyến đi (màu sắc) không xung đột (chia sẻ một cạnh) và màu đỉnh có kích thước tối thiểu mất ít chuyến nhất có thể.vwGvwvHH

Có thể đi theo hướng khác (giảm màu đồ thị, hoặc một số vấn đề NP-hard khác, cho vấn đề của bạn, và do đó thiết lập độ cứng NP của nó), bằng cách điều chỉnh giảm từ 3SAT sang Tô màu đồ thị (ví dụ: chi tiết trên trang 10 ghi chú của Jeff Erickson ), nhưng tôi đã không tự mình thử điều này.


Câu trả lời này là tuyệt vời; đó chỉ là những gì tôi đang tìm kiếm. Khi phân tích độ phức tạp thời gian của thuật toán này, có tối đa đỉnh (quà) và . Khi tôi tìm một thuật toán tô màu đồ thị, tất cả những gì tôi tìm thấy là cho một đồ thị có đỉnh. Có một thuật toán hiệu quả hơn trong trường hợp này bởi vì có một đa thức trên bị ràng buộc về số cạnh? n2n(2n3)(n2n)2O(2nn)n
Riley

1
@Riley Có lẽ là không, quyết định -colourability, cho một đồ thị có mức độ tối đa đã là NP-hard. Xem những [ghi chú bài giảng] (www-sop.inria.fr/members/Frederic.Havet/Cours/coloration.pdf) để giảm từ 3-SAT xuống đồ thị với mức độ tối đa 3.kk33
Thằn lằn rời rạc

@ Thằn lằn rời rạc: Trường hợp trong những ghi chú bài giảng họ làm giảm như vậy?

Tại sao câu trả lời này được chấp nhận? Nó không hiển thị độ cứng NP hay thuật toán 'tối ưu nhất' hay thậm chí là thuật toán hiệu quả, theo như tôi có thể thấy.
Thằn lằn rời rạc

1
@Discretelizard Được rồi. Tôi không nghĩ rằng câu hỏi ngụ ý rằng tôi đang tìm kiếm thuật toán thời gian P, đặc biệt là khả năng vấn đề này là NP-hard. Nhưng tôi có thể làm cho điểm đó rõ ràng hơn trong câu hỏi ban đầu. Tôi sẽ bỏ đánh dấu câu trả lời này là chính xác và thêm tiền thưởng 100 điểm (hóa ra câu trả lời thứ hai phải là 100 nếu trong cùng một câu hỏi, nhưng tôi sẵn sàng cung cấp nó vì chúng chỉ là các điểm internet tưởng tượng, phải không? :)) một lần nữa cho bất cứ ai có thể chỉ ra vấn đề này là NP-hard, HOẶC tìm một thuật toán thời gian đa thức để giải quyết nó.
Riley

0

Đó là loại vấn đề mà tôi sẽ rất lo lắng nếu sếp yêu cầu tôi thực hiện một thuật toán được đảm bảo để tìm ra giải pháp tối ưu trong thời gian hợp lý.

Để tìm một giải pháp không nhất thiết phải tối ưu: Cho bất kỳ nhóm người và quà nào để mua, chúng tôi có thể đếm xem có bao nhiêu món quà mà một nhóm người có thể mua trong một chuyến đi mua sắm. Vì vậy, bắt đầu với một nhóm trống (có thể mua 0 món quà). Đối với mỗi người không thuộc nhóm, hãy xác định có thể mua bao nhiêu quà nếu người đó được thêm vào nhóm. Nếu có bất kỳ người nào chúng tôi có thể thêm mà không giảm số lượng quà tặng, hãy chọn ngẫu nhiên một trong số những người tăng số lượng quà được mua bằng số tiền tối đa, cho đến khi thêm bất kỳ người nào sẽ giảm số lượng quà đã mua. Sau đó thực hiện chuyến đi mua sắm đó và bắt đầu lại cho đến khi tất cả các món quà được mua.

Tôi sẽ lặp lại một vài lần, chọn những người khác nhau "một cách ngẫu nhiên" trong trường hợp tìm ra giải pháp tốt hơn.

Trong ví dụ, năm người phải mua một món quà cho nhau, điều này tìm ra giải pháp trong bốn chuyến đi, đó là tối ưu; nếu chúng tôi không thêm người vào một chuyến đi mà số lượng quà tặng không thay đổi mà không cải thiện nó, chúng tôi sẽ có năm chuyến đi. Và 6 người cần 5 chuyến.


Nói cách khác, bạn đang tham lam chọn các chuyến đi mua sắm theo số lượng quà sẽ được mua. Bạn có thể chứng minh rằng thủ tục này nhất thiết dẫn đến số lượng chuyến đi mua sắm tối thiểu có thể? Nếu vậy, bạn đã làm việc thông qua ví dụ về 6 người không chính xác. 6 người chỉ cần 4 chuyến mua sắm: . {{1,2,3},{1,4,5},{2,4,6},{3,5,6}}
Riley

Hoàn toàn không có bằng chứng. Thuật toán tham lam + thực hiện các lựa chọn ngẫu nhiên khác nhau sẽ cải thiện cơ hội của bạn một chút nhưng sẽ không thực hiện 4 chuyến đi.
gnasher729

Tôi đã kiểm tra tuyên bố rằng vấn đề là tham lam, và nó đã thất bại. Ngay cả khi bạn kiểm tra mọi chuyến đi mua sắm có thể thay vì thêm từng người một, bạn vẫn nhận được 5 chuyến: . Cách tiếp cận tham lam muốn chuyến đi mua sắm thứ hai mua 9 món quà, nhưng trong giải pháp tối ưu, chuyến đi mua sắm thứ hai mua 8 món quà (giả sử nó đi theo thứ tự được liệt kê ở trên). {{1,2,3},{4,5,6},{1,4},{2,5},{3,6}}
Riley

Trên thực tế, cách tiếp cận tham lam thậm chí không giải quyết được trường hợp 5 người trong 4 chuyến mua sắm: . {{1,2},{3,4},{5},{1,3},{2,4}}
Riley

-1

Giả sử rằng bạn ra lệnh cho những người dựa trên người mà họ đang nhận từ (cha mẹ) và người mà họ đang cho (con). Vì mọi người đều tặng một món quà và nhận một món quà, nên chức năng cha-con là một.

Bạn không bao giờ muốn đưa cha mẹ và đứa trẻ vào cùng một nhóm. Bạn bắt đầu với một người ngẫu nhiên và sắp xếp mọi người phù hợp, vì vậy, , v.v. Bạn đặt tất cả vào một nhóm và tất cả vào một nhóm khác. Đối với người cuối cùng , vì vậy bạn không muốn người này ở cùng nhóm với . Nếu là chẵn thì đó không phải là vấn đề. Khác, bạn cần thêm một nhóm, có thể chỉ là , trong trường hợp đơn giản nhất. c h i l d ( p 1 ) = p 2 p o d d p e v e np1child(p1)=p2poddpevenp 1 n p npn=parent(p1)p1npn

Thuật toán này giả định tất cả mọi người được kết nối. Nhưng nó không cần phải là trường hợp. Nếu có nhiều chu kỳ bị ngắt kết nối, nói cách khác, nếu tại một thời điểm nào đó, trong đó , thì bạn kết thúc vòng tròn đó và bắt đầu với một vòng tròn mới, theo cùng một thuật toán. Miễn là bạn không hợp nhất các tỷ lệ cược và phát sinh của cùng một chu kỳ, bạn có thể hợp nhất các chu kỳ bị ngắt kết nối.k ! = npk=parent(p1)k!=n

Thuật toán này kết thúc với tối đa 2 vòng (đối với chẵn ) và 3 vòng (đối với lẻ ).nnn


Dường như cách tiếp cận này chỉ giải quyết vấn đề cho trường hợp mọi người tặng một món quà và nhận một món quà, tức là đồ thị là một hoán vị. Tôi không chắc chắn rằng câu hỏi chỉ hỏi về trường hợp đặc biệt đó - hãy xem OP nói gì về điều đó.
DW

Đó là sự thật, giải pháp của tôi là cho một trường hợp phụ của vấn đề trong đó . i,fan_in(vi)=fan_out(vi)=1
ilke444

Vâng, tôi đã không yêu cầu hoán vị cụ thể. Xin vui lòng xem câu hỏi cập nhật, nơi tôi làm rõ một vài điều.
Riley
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.