Thuật toán hiệu quả để tạo ra hai hoán vị khuếch tán, loạn trí của một multiset một cách ngẫu nhiên


13

Lý lịch

Giả sử tôi có hai lô viên giống hệt nhau . Mỗi viên bi có thể là một trong những màu , trong đó . Hãy biểu thị số lượng viên bi màu trong từng lô.nccnnTôiTôi

Đặt là multiset đại diện cho một lô. Trong biểu diễn tần số , \ msS cũng có thể được viết dưới dạng (\ po ^ {n_1} \; \ pt ^ {n_2} \; khăn \; \ pc ^ {n_c}) .S{1,Giáo dục,1n1,2,Giáo dục,2n2,Giáo dục,1c,Giáo dục,cnc}S(1n12n2Giáo dụccnc)

Số lượng hoán vị riêng biệt của S được đưa ra bởi đa thức :

|SS|= =(nn1,n2,Giáo dục,nc)= =n!n1!n2!nc!= =n!ΠTôi= =1c1nTôi!.

Câu hỏi

Có một thuật toán hiệu quả để tạo ra hai hoán vị khuếch tán, loạn trí PQ của S một cách ngẫu nhiên không? (Việc phân phối phải thống nhất.)

  • Một hoán vị Pkhuếch tán nếu cho mọi phần tử riêng biệt Tôi của P , các trường hợp của Tôi được cách nhau ra các khá đồng đều trong P .

    Ví dụ: giả sử S= =(1424)= ={1,1,1,1,2,2,2,2} .

    • {1,1,1,2,2,2,2,1} không khuếch tán
    • {1,2,1,2,1,2,1,2} là khuếch tán

    Nghiêm khắc hơn:

    • Nếu nTôi= =1 , chỉ có một phiên bản của Tôi để không gian bên ngoài ra ngoài trong P , vì vậy hãy để Δ(Tôi)= =0 .
    • Nếu không, hãy để d(i,j) là khoảng cách giữa dụ  j và dụ  j+1 của i trong P . Trừ đi khoảng cách dự kiến ​​giữa các trường hợp của i , xác định các mục sau:
      δ(i,j)=d(i,j)nniΔ(i)=j=1ni1δ(i,j)2
      Nếu i cách đều nhau trong P , thì Δ(i) phải bằng 0 hoặc rất gần với 0 nếu nin .

    Bây giờ xác định số liệu thống kê để đo lường bao nhiêu mỗi là đều nhau trong . Chúng tôi gọi khuếch tán nếu gần bằng 0 hoặc gần bằng . (Người ta có thể chọn ngưỡng cụ thể cho để khuếch tán nếu )i P P s ( P ) s ( P ) « n 2 k « 1 S P s ( P ) < k n 2s(P)=i=1cΔ(i)iPPs(P)s(P)n2k1SPs(P)<kn2

    Ràng buộc này gợi lại một vấn đề lập lịch thời gian thực chặt chẽ hơn được gọi là vấn đề pinwheel với multiset (sao cho ) và mật độ . Mục tiêu là lên lịch cho một chuỗi vô hạn theo chu kỳ sao cho bất kỳ chuỗi con nào có độ dài đều chứa ít nhất một thể hiện của . Nói cách khác, một lịch trình khả thi đòi hỏi tất cả ; nếu đậm đặc ( ), thì và . Vấn đề pinwheel dường như là NP-hoàn thành.một i = n / n i ρ = Σ c i = 1 n i / n = 1 P một i i d ( i , j ) một i Một ρ = 1 d ( i , j ) = một tôi s ( P ) = 0A=n/Sai=n/niρ=i=1cni/n=1PaiTôid(Tôi,j)mộtTôiMộtρ= =1d(Tôi,j)= =mộtTôiS(P)= =0

  • Hai hoán vị và đang bị rối loạn nếu là một xáo trộn của ; nghĩa là, cho mọi chỉ số .QPQPP iQ i i [ n ]QPTôiQTôiTôi[n]

    Ví dụ: giả sử .S= =(1222)= ={1,1,2,2}

    • {1,2,1,2} và không bị loạn trí{1,1,2,2}
    • {1,2,1,2} và bị loạn trí{2,1,2,1}

Phân tích thăm dò

Tôi quan tâm đến gia đình nhiều người có và cho . Cụ thể, hãy để .n= =20nTôi= =4Tôi4D= =(14243443526171số 81)

  • Xác suất mà hai hoán vị ngẫu nhiên và của đang bị rối loạn là khoảng 3%.PQD

    Điều này có thể được tính như sau, trong đó là đa thức Laguerre thứ : Xem ở đây để giải thích.Lkk

    |DD|=0dteti=1cLni(t)=0dtet(L4(t))3(L3(t))(L2(t))(L1(t))3=4.5×1011|SD|=n!i=1c1ni!=20!(4!)3(3!)(2!)(1!)3=1.5×1013p=|DD|/|SD|0.03
  • Xác suất mà một hoán vị ngẫu nhiên của là khuếch tán là khoảng 0,01%, đặt ngưỡng tùy ý ở mức xấp xỉ .DPDs(P)<25

    Dưới đây là biểu đồ xác suất theo kinh nghiệm gồm 100.000 mẫu trong đó là hoán vị ngẫu nhiên của .P Ds(P)PD

    Ở kích thước mẫu trung bình, .s(P)Gamma(α8,β18)

    Ps(P)cdf(s(P)){1,8,2,3,4,1,5,2,3,6,1,4,2,3,7,1,5,2,4,3}1191<105{8,2,3,4,1,6,5,2,3,4,1,7,1,2,3,5,4,1,2,3}140916<104{3,6,5,1,3,4,2,1,2,7,8,5,2,4,1,3,3,2,1,4}650972<10.05{3,1,3,4,8,2,2,1,1,5,3,3,2,6,4,4,2,1,7,5}12239136<10.45{4,1,1,4,5,5,1,3,3,7,1,2,2,4,3,3,8,2,2,6}16979189<10.80

Xác suất hai hoán vị ngẫu nhiên là hợp lệ (cả khuếch tán và loạn trí) là khoảng .v(0.03)(0.0001)21010

Thuật toán không hiệu quả

Một thuật toán phổ biến nhanh trên nền tảng phổ biến để tạo ra sự biến dạng ngẫu nhiên của một tập hợp là dựa trên từ chối:

làm
     P ← Random_permuting ( D )
cho đến khi is_derangement ( D , P )
trả lại P

trong đó mất khoảng lần lặp, vì có khoảng có thể xảy ra. Tuy nhiên, thuật toán ngẫu nhiên dựa trên từ chối sẽ không hiệu quả cho vấn đề này, vì nó sẽ theo thứ tự lặp lại .n ! / E 1 / v 10 10en!/e1/v1010

Trong thuật toán được sử dụng bởi Sage , một sự biến dạng ngẫu nhiên của multiset Nhận được hình thành bằng cách chọn một phần tử ngẫu nhiên từ danh sách tất cả các biến động có thể xảy ra. Đây cũng là điều không hiệu quả, vì có hoán vị hợp lệ để liệt kê, và bên cạnh đó, người ta sẽ cần một thuật toán chỉ để làm điều đó.v|SD|21016

Câu hỏi thêm

Sự phức tạp của vấn đề này là gì? Nó có thể được giảm xuống bất kỳ mô hình quen thuộc nào, chẳng hạn như lưu lượng mạng, tô màu đồ thị hoặc lập trình tuyến tính không?


Về định nghĩa của bạn về "khoảng cách", bạn không muốn cho với là trọng điểm? Điều đó có nghĩa là, một yếu tố duy nhất nên ở giữa, hai nên phân vùng hoán vị trong phần ba, v.v. 0 i j n + 1 P 0 = P n + 1 = id(i,j)n/(ni+1)0ijn+1P0=Pn+1=i
Raphael

Điều gì xảy ra nếu cho ác (nhỏ, nhưng đủ lớn); chúng ta thậm chí hoán vị khuếch tán hơn? Chúng tôi chắc chắn không thể thay đổi để tìm thấy hai người loạn trí! Có vẻ như không có yếu tố nào có thể xảy ra nhiều hơn lần. S={1nk,2k}kn/2
Raphael

1
Tỷ lệ của tất cả các cặp hoán vị loạn trong số tất cả các cặp hoán vị khuếch tán là gì? Tương tự, trong số tất cả các cặp hoán vị bị loạn trí, có bao nhiêu bao gồm hai cái khuếch tán? (Nếu một trong hai tỷ lệ này là "cao", chúng ta có thể tập trung nỗ lực vào một nửa của quá trình, khiến cho phần còn lại bị từ chối.)
Raphael

1
@Raphael (# 3a) Trong số 1 triệu hoán vị ngẫu nhiên của , 561 cái khuếch tán này có . các cặp bị loạn trí. Ds(P)306118/(5612)=6118/1570803.9%
hftf

1
@Raphael (# 3b) Trong số 10 triệu cặp hoán vị ngẫu nhiên của , cặp đã bị loạn trí. Chỉ 29 trong số các cặp đó có cả hai hoán vị với . Đây là một biểu đồ ( giá trị ). Ds(P)50
hftf

Câu trả lời:


3

Một cách tiếp cận: bạn có thể giảm vấn đề này thành vấn đề sau: Đưa ra công thức boolean , chọn một phép gán một cách ngẫu nhiên trong số tất cả các phép gán thỏa mãn của . Vấn đề này là NP-hard, nhưng có các thuật toán tiêu chuẩn để tạo một được phân phối gần đúng, các phương thức mượn từ các thuật toán #SAT. Ví dụ, một kỹ thuật là để chọn một hàm băm mà phạm vi có kích thước đã chọn một cách cẩn thận (khoảng cùng kích cỡ với số lượng đáp ứng nhiệm vụ của ), chọn thống nhất một cách ngẫu nhiên một giá trị từ trong phạm vi củaφ(x)xφ(x)xhφyhvà sau đó sử dụng bộ giải SAT để tìm một phép gán thỏa mãn cho công thức . Để làm cho nó hiệu quả, bạn có thể chọn là một bản đồ tuyến tính thưa thớt.φ(x)(h(x)=y)h

Đây có thể là bắn một con bọ chét bằng đại bác, nhưng nếu bạn không có cách tiếp cận nào khác có vẻ khả thi, thì đây là cách bạn có thể thử.


tìm cái này khó theo. là một giá trị boolean và là một chuỗi nhị phân (tập hợp các biến nhị phân)? vậy phương trình cuối cùng có nghĩa là ...? φ(x)h(x)
vzn

0

một số thảo luận / phân tích mở rộng về vấn đề này bắt đầu trong trò chuyện cs với nền tảng sâu hơn đã phát hiện ra một số tính chủ quan trong các yêu cầu phức tạp của vấn đề nhưng không tìm thấy bất kỳ lỗi hoặc lỗi quá mức nào. 1

đây là một số mã được kiểm tra / phân tích, so với giải pháp khác dựa trên SAT tương đối "nhanh và bẩn" nhưng không cần thiết / khó để gỡ lỗi. khái niệm lỏng lẻo của nó dựa trên sơ đồ tối ưu hóa giả / tham lam cục bộ hơi giống với ví dụ 2-OPT cho TSP . ý tưởng cơ bản là bắt đầu với một giải pháp ngẫu nhiên phù hợp với một số ràng buộc và sau đó gây nhiễu nó cục bộ để tìm kiếm các cải tiến, tham lam tìm kiếm các cải tiến và lặp lại qua chúng, và chấm dứt khi tất cả các cải tiến cục bộ đã cạn kiệt. một tiêu chí thiết kế là thuật toán phải hiệu quả / tránh bị từ chối càng nhiều càng tốt.

có một số nghiên cứu về các thuật toán loạn trí [4], ví dụ như được sử dụng trong SAGE [5] nhưng chúng không được định hướng xung quanh nhiều trang.

nhiễu loạn đơn giản chỉ là "hoán đổi" của hai vị trí trong bộ dữ liệu. việc thực hiện là trong ruby. sau đây là một số tổng quan / ghi chú với số refs cho số dòng.

qb2.rb (gist-github)

Cách tiếp cận ở đây là bắt đầu với hai bộ dữ liệu bị loạn trí (# 106) và sau đó cải thiện sự phân tán cục bộ (# 107), kết hợp trong một khái niệm gọi là derangesperse(# 97), bảo toàn sự loạn trí. lưu ý rằng việc hoán đổi hai vị trí giống nhau trong cặp tuple sẽ bảo vệ sự loạn trí và có thể cải thiện sự phân tán và đó là (một phần) của phương pháp / chiến lược phân tán.

các derangechương trình con công trình trái sang phải trên mảng (MultiSet) và giao dịch hoán đổi với các yếu tố sau trong mảng nơi trao đổi không phải là với cùng một nguyên tố (# 10). thuật toán thành công nếu, không có sự hoán đổi nào ở vị trí cuối cùng, hai bộ dữ liệu vẫn bị loạn trí (# 16).

có 3 cách tiếp cận khác nhau để làm loạn các bộ dữ liệu ban đầu. tuple thứ 2 p2luôn bị xáo trộn. người ta có thể bắt đầu với tuple 1 ( p1) được sắp xếp theo a."bậc 1 quyền lực cao nhất" (# 128), b.thứ tự xáo trộn (# 127) c.và "bậc thấp nhất bậc 1" ("quyền hạn cao nhất bậc nhất") (# 126).

thói quen phân tán dispersecó liên quan nhiều hơn nhưng về mặt khái niệm không quá khó. một lần nữa nó sử dụng giao dịch hoán đổi. thay vì cố gắng tối ưu hóa sự phân tán nói chung trên tất cả các yếu tố, nó chỉ đơn giản là cố gắng lặp đi lặp lại làm giảm bớt trường hợp xấu nhất hiện tại. ý tưởng là tìm các phần tử phân tán ít nhất thứ 1 , từ trái sang phải. nhiễu loạn là hoán đổi các phần tử bên trái hoặc bên phải ( x, ychỉ mục) của cặp phân tán ít nhất với các phần tử khác nhưng không bao giờ có bất kỳ phần nào giữa cặp (sẽ luôn giảm phân tán) và cũng bỏ qua việc cố gắng trao đổi với các phần tử tương tự ( selecttrong # 71) . mlà chỉ số trung điểm của cặp (# 65).

tuy nhiên, độ phân tán được đo / tối ưu hóa trên cả hai bộ dữ liệu trong cặp (# 40) bằng cách sử dụng độ phân tán "ít nhất / trái nhất" trong mỗi cặp (# 25, # 44).

thuật toán cố gắng hoán đổi các phần tử "xa nhất" thứ 1 ( sort_by / reverse# 71).

có hai chiến lược khác nhau true, falseđể quyết định nên hoán đổi phần tử bên trái hay bên phải của cặp phân tán ít nhất (# 80), hoặc phần tử bên trái cho vị trí hoán đổi sang phần tử bên trái / bên phải hoặc phần tử bên trái hoặc bên phải xa nhất trong cặp phân tán từ phần tử hoán đổi.

thuật toán kết thúc (# 91) khi nó không còn có thể cải thiện độ phân tán (di chuyển vị trí phân tán xấu nhất sang phải hoặc tăng độ phân tán tối đa trên toàn bộ cặp tuple (# 85)).

số liệu thống kê là đầu ra để loại bỏ hơn c1000 lần loạn trong 3 cách tiếp cận (# 116) và c= 1000 biến số (# 97), xem xét 2 thuật toán phân tán cho một cặp bị loạn trí từ chối (# 19, # 106). cái sau theo dõi tổng độ phân tán trung bình (sau khi loạn được đảm bảo). một ví dụ chạy như sau

c       0.661000
b       0.824000
a       0.927000
[2.484, 2, 4]
[2.668, 2, 4]

điều này cho thấy a-truethuật toán cho kết quả tốt nhất với ~ 92% không phản xạ và khoảng cách phân tán tồi tệ nhất trung bình ~ 2,6 và tối thiểu được bảo đảm là hơn 2 thử nghiệm, tức là ít nhất 1 yếu tố can thiệp không có yếu tố giữa tất cả các cặp yếu tố tương tự. nó đã tìm ra giải pháp cao tới 3 yếu tố can thiệp không cần thiết.

thuật toán loạn trí là loại bỏ trước thời gian tuyến tính và thuật toán phân tán (chạy trên đầu vào bị loạn) dường như có thể ~ .Ôi(nđăng nhậpn)

1 vấn đề là tìm ra các sắp xếp gói quizbowl thỏa mãn cái gọi là "phong thủy" [1] hoặc một thứ tự ngẫu nhiên "tốt đẹp" trong đó "đẹp" có phần chủ quan và chưa được "định lượng" chính thức; tác giả của vấn đề đã phân tích / giảm nó thành các tiêu chí gây rối / phân tán dựa trên nghiên cứu của cộng đồng quizbowl và "các chuyên gia phong thủy". [2] có những ý tưởng khác nhau về "quy tắc phong thủy." một số nghiên cứu "được công bố" đã được thực hiện trên các thuật toán nhưng nó xuất hiện ở giai đoạn đầu. [3]

[1] Gói phong thủy / QBWiki

[2] Gói Quizbowl và phong thủy / Lifshitz

[3] Đặt câu hỏi , diễn đàn trung tâm tài nguyên HSQuizbowl

[4] Tạo ra sự biến đổi ngẫu nhiên / Martinez, Panholzer, Prodinger

[5] Thuật toán khử nhiễu hiền (python) / McAndrew


fyi nghĩ thêm, có một trục trặc trong thói quen derange & nó không phải lúc nào cũng loạn trí. vị trí trao đổi có thể tiến lên mà không trao đổi bất cứ điều gì. Có một sửa chữa đơn giản để kiểm tra thành công chính xác.
vzn
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.