อัลกอริทึมที่มีประสิทธิภาพในการสร้างการกระจายสองแบบเรียงสับเปลี่ยนของชุดมัลติเซ็ตที่สุ่ม


13

พื้นหลัง

สมมติว่าฉันมีสองสำหรับกระบวนการที่เหมือนกันของnหินอ่อน แต่ละหินอ่อนสามารถเป็นหนึ่งในcสีที่c≤ncnให้niแทนจำนวนหินอ่อนสีiในแต่ละชุด

ให้Sเป็นมัลติเซ็ต{1,,1n1,2,,2n2,,1c,,cnc}แทนหนึ่งชุด ในการเป็นตัวแทนความถี่ , Sนอกจากนี้ยังสามารถเขียนเป็น(1n12n2cnc){n_c})

จำนวนการเรียงสับเปลี่ยนที่แตกต่างกันของSนั้นมอบโดยMultinomial :

|SS|=(nn1,n2,,nc)=n!n1!n2!nc!=n!i=1c1ni!.

คำถาม

มีอัลกอริทึมที่มีประสิทธิภาพในการสร้างการกระจายสองแบบเรียงสับเปลี่ยนPและQของSที่สุ่มหรือไม่ (การกระจายควรเป็นแบบเดียวกัน)

  • เปลี่ยนแปลงPคือกระจายถ้าองค์ประกอบที่แตกต่างกันทุกiของPกรณีของiมีระยะห่างออกไปประมาณเท่า ๆ กันในPP

    ตัวอย่างเช่นสมมติว่าS=(1424)={1,1,1,1,2,2,2,2}\}

    • {1,1,1,2,2,2,2,1}ไม่กระจาย
    • {1,2,1,2,1,2,1,2}กระจาย

    อย่างจริงจังมากขึ้น:

    • หากมีเพียงหนึ่งตัวอย่างของไป“พื้นที่ออก” ในเพื่อให้ 0ni=1iPΔ(i)=0
    • มิฉะนั้นให้เป็นระยะห่างระหว่างอินสแตนซ์ และอินสแตนซ์ ของในPลบออกจากระยะทางที่คาดไว้ระหว่างอินสแตนซ์ของกำหนดดังต่อไปนี้: ถ้าจะเว้นระยะเท่ากันในแล้วควรจะเป็นศูนย์หรือมากใกล้เคียงกับศูนย์ถ้าnd(i,j)jj+1iPi
      δ(i,j)=d(i,j)nniΔ(i)=j=1ni1δ(i,j)2
      iPΔ(i)nin

    ตอนนี้กำหนดสถิติการวัดว่ามากทุกจะเว้นระยะเท่ากันในPเราเรียกกระจายถ้าอยู่ใกล้กับศูนย์หรือประมาณ 2 (หนึ่งสามารถเลือกขีด จำกัดเฉพาะกับเพื่อให้แพร่กระจายถ้า )s(P)=i=1cΔ(i)iPPs(P)s(P)n2k1SPs(P)<kn2

    ข้อ จำกัด นี้จำได้ว่าเข้มงวดปัญหาการจัดตารางเวลาจริงที่เรียกว่าปัญหาตะไลกับ MultiSet (เพื่อให้ ) และความหนาแน่น 1 โดยมีวัตถุประสงค์เพื่อกำหนดตารางการวงจรลำดับอนันต์ดังกล่าวว่า subsequence ยาว ๆมีอย่างน้อยหนึ่งตัวอย่างของฉันกล่าวอีกนัยหนึ่งตารางเวลาที่เป็นไปได้นั้นต้องการทั้งหมด ถ้ามีความหนาแน่นสูง ( ) จากนั้นและ 0 ปัญหาการหมุนวนดูเหมือนว่าจะสมบูรณ์แล้วA=n/Sai=n/niρ=i=1cni/n=1Paiid(i,j)aiAρ=1d(i,j)=ais(P)=0

  • การเรียงสับเปลี่ยนสองและจะแปรผันถ้าเป็นการเรียงความของ ; นั่นคือสำหรับทุกดัชนี[N]PQPQPiQii[n]

    ตัวอย่างเช่นสมมติว่า\}S=(1222)={1,1,2,2}

    • {1,2,1,2}และไม่ได้ถูกทำให้ผิด{1,1,2,2}
    • {1,2,1,2}และจะบ้า{2,1,2,1}

การวิเคราะห์เชิงสำรวจ

ฉันสนใจในครอบครัวของมัลติกับและสำหรับฉันโดยเฉพาะอย่างยิ่งให้1)n=20ni=4i4D=(1424344352617181)

  • น่าจะเป็นที่สองพีชคณิตแบบสุ่มและของจะบ้าเป็นประมาณ 3%PQD

    สามารถคำนวณได้ดังนี้โดยที่คือพหุนาม th Laguerre: ดูที่นี่สำหรับคำอธิบาย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
  • ความน่าจะเป็นที่การเปลี่ยนแปลงสุ่มของเป็นกระจายเป็นเรื่องเกี่ยวกับ 0.01%, การตั้งค่าเกณฑ์พลที่ประมาณsPDs(P)<25

    ด้านล่างนี้เป็นพล็อตน่าจะเป็นเชิงประจักษ์ 100,000 ตัวอย่างของที่คือการเปลี่ยนแปลงแบบสุ่มของ\s(P)PD

    ที่ขนาดตัวอย่างขนาดกลางapprox18)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

น่าจะเป็นที่สองพีชคณิตแบบสุ่มที่ถูกต้อง (ทั้งกระจายและสติฟั่นเฟือน) เป็นรอบ 10}v(0.03)(0.0001)21010

อัลกอริทึมที่ไม่มีประสิทธิภาพ

อัลกอริธึม“ เร็ว” ทั่วไปเพื่อสร้างการสุ่มเซตของชุดนั้นขึ้นอยู่กับการปฏิเสธ:

ทำ
     P ← random_permutation ( D )
จนกระทั่ง is_derangement ( D , P )
ส่งคืนP

ซึ่งใช้เวลาประมาณซ้ำเนื่องจากมีประมาณ derangements ที่เป็นไปได้ อย่างไรก็ตามอัลกอริธึมที่ใช้การปฏิเสธแบบอิงจะไม่มีประสิทธิภาพสำหรับปัญหานี้เนื่องจากจะใช้การเรียงลำดับซ้ำen!/e1/v1010

ในอัลกอริทึมที่ใช้โดยSageการสุ่มเรียงความของชุดย่อย“ ถูกสร้างขึ้นโดยการเลือกองค์ประกอบที่สุ่มจากรายการของการเรียงลำดับที่เป็นไปได้ทั้งหมด” แต่นี่ก็เป็นสิ่งที่ไม่มีประสิทธิภาพเนื่องจากมีการเรียงสับเปลี่ยนที่ถูกต้องในการแจกแจงv|SD|21016

คำถามเพิ่มเติม

ความซับซ้อนของปัญหานี้คืออะไร? มันสามารถลดให้อยู่ในกระบวนทัศน์ที่คุ้นเคยเช่นโฟลว์เครือข่ายการระบายสีกราฟหรือการเขียนโปรแกรมเชิงเส้นได้หรือไม่?


เกี่ยวกับคำจำกัดความของคุณ "เว้นระยะ" คุณไม่ต้องการสำหรับกับเป็นรักษาการณ์? กล่าวคือองค์ประกอบหนึ่งควรจะอยู่ตรงกลางสองควรแบ่งการเปลี่ยนแปลงในสามในและอื่น ๆ d(i,j)n/(ni+1)0ijn+1P0=Pn+1=i
ราฟาเอล

จะเกิดอะไรขึ้นถ้าสำหรับความชั่วร้าย (เล็ก แต่ใหญ่พอ); ทำไมเราถึงมีการกระจายพีชคณิตมากกว่า? แน่นอนว่าเราไม่ทนต่อการเปลี่ยนแปลงเพื่อค้นหาสิ่งที่บ้าสองอย่าง! ดูเหมือนว่าไม่มีองค์ประกอบใดสามารถเกิดขึ้นได้มากกว่าครั้ง S={1nk,2k}kn/2
ราฟาเอล

1
อัตราส่วนของทุกคู่ของพีชคณิตบ้าหมู่ทุกคู่คืออะไรกระจายพีชคณิต? ในทำนองเดียวกันจากการเรียงสับเปลี่ยนที่ยุ่งเหยิงทั้งหมดมีกี่ตัวที่กระจายสองอัน (หากอัตราส่วนใดเป็น "สูง" เราสามารถมุ่งความพยายามไปที่ครึ่งหนึ่งของกระบวนการโดยปล่อยให้อีกฝ่ายถูกปฏิเสธ)
Raphael

1
@Raphael (# 3a) 1 ล้านพีชคณิตแบบสุ่มของ , เหล่านี้ 561 คนกระจายมี30 ของคู่จะบ้า Ds(P)306118/(5612)=6118/1570803.9%
hftf

1
@ ราฟาเอล (# 3b) จากการสุ่มเรียงลำดับ 10 ล้านคู่ของ , 306893 คู่จะถูกทำให้ยุ่งเหยิง เพียง 29 คู่ผู้ที่มีทั้งพีชคณิตกับsนี่คือฮิสโตแกรม ( ค่า ) Ds(P)50
hftf

คำตอบ:


3

วิธีการหนึ่ง: คุณสามารถลดนี้ในการแก้ไขปัญหาต่อไปนี้: กำหนดสูตรบูลเลือกมอบหมายสม่ำเสมอโดยการสุ่มจากในทุกการกำหนดความพึงพอใจของ(x) ปัญหานี้เป็นปัญหาที่เกิดขึ้นยาก แต่มีอัลกอริธึมมาตรฐานสำหรับการสร้างที่มีการกระจายอย่างเท่าเทียมกันวิธีการยืมจากอัลกอริทึม #SAT ตัวอย่างเช่นเทคนิคหนึ่งคือการเลือกฟังก์ชันแฮซึ่งช่วงมีขนาดที่เลือกอย่างระมัดระวัง (ประมาณขนาดเดียวกับจำนวนการมอบหมายที่น่าพอใจของ ) เลือกสุ่มค่าจากภายในช่วงφ(x)xφ(x)xhφyhและจากนั้นใช้ SAT แก้คุณจะพบกับความพึงพอใจที่ได้รับมอบหมายสูตรy) เพื่อให้มีประสิทธิภาพคุณสามารถเลือกเพื่อเป็นแผนที่เชิงเส้นที่กระจัดกระจายφ(x)(h(x)=y)h

นี่อาจเป็นการยิงหมัดด้วยปืนใหญ่ แต่ถ้าคุณไม่มีวิธีอื่นที่ใช้การได้นี่เป็นวิธีที่คุณสามารถลองได้


การค้นหาสิ่งนี้ยากที่จะติดตาม เป็นค่าบูลีนและเป็นสตริงไบนารี่ (ชุดของตัวแปรไบนารี)? ดังนั้นสมการสุดท้ายหมายความว่า ... φ(x)h(x)
vzn

0

การอภิปราย / การวิเคราะห์เพิ่มเติมบางอย่างของปัญหานี้เริ่มต้นขึ้นในการแชท csด้วยพื้นหลังเพิ่มเติมซึ่งเปิดโปงความเป็นส่วนตัวในความต้องการที่ซับซ้อนของปัญหา แต่ไม่พบข้อผิดพลาดหรือการกำกับดูแลทันที 1

นี่คือโค้ดทดสอบ / วิเคราะห์บางส่วนซึ่งเมื่อเทียบกับโซลูชันอื่น ๆ ที่ใช้พื้นฐาน SAT นั้นค่อนข้าง "รวดเร็วและสกปรก" แต่ก็ไม่สมควร / ยากที่จะดีบั๊ก หลวมพื้นฐานของแนวคิดในท้องถิ่น pseudorandom / โลภโครงการเพิ่มประสิทธิภาพค่อนข้างคล้ายกับเช่น2 OPTสำหรับTSP แนวคิดพื้นฐานคือการเริ่มต้นด้วยวิธีการแก้ปัญหาแบบสุ่มที่เหมาะกับข้อ จำกัด บางอย่างแล้วรบกวนพวกเขาในประเทศเพื่อค้นหาการปรับปรุงตะกละค้นหาการปรับปรุงและวนซ้ำพวกเขาและยุติเมื่อการปรับปรุงในท้องถิ่นหมดลง เกณฑ์การออกแบบคืออัลกอริทึมควรมีประสิทธิภาพ / หลีกเลี่ยงการปฏิเสธมากที่สุด

มีงานวิจัยเกี่ยวกับอัลกอริธึม derangement [4] เช่นใช้ใน SAGE [5] แต่ไม่ได้เน้นไปที่มัลติเซ็ต

การก่อกวนอย่างง่ายเป็นเพียง "การแลกเปลี่ยน" ของสองตำแหน่งใน tuple (s) การดำเนินการอยู่ในทับทิม ต่อไปนี้เป็นภาพรวม / บันทึกย่อที่มีการอ้างอิงถึงหมายเลขบรรทัด

qb2.rb (gist-github)

วิธีการที่นี่คือการเริ่มต้นด้วยสอง tuples บ้าคลั่ง (# 106) แล้วท้องถิ่น / ตะกละตะกลามปรับปรุงการกระจาย (# 107) รวมอยู่ในแนวคิดที่เรียกว่าderangesperse(# 97) รักษาความสับสน โปรดทราบว่าการแลกเปลี่ยนสองตำแหน่งเดียวกันในคู่ tuple รักษาความผิดเพี้ยนและสามารถปรับปรุงการกระจายตัวและนั่นคือ (ส่วนหนึ่งของ) วิธีการ / กลยุทธ์การกระจาย

derangeย่อยทำงานซ้ายไปขวาบนอาร์เรย์ (MultiSet) และแลกเปลี่ยนกับองค์ประกอบในภายหลังในอาร์เรย์ที่แลกเปลี่ยนไม่ได้อยู่กับองค์ประกอบเดียวกัน (# 10) อัลกอริทึมสำเร็จถ้าไม่มีการแลกเปลี่ยนที่ตำแหน่งสุดท้ายทั้งสอง tuples ยังคงบ้า (# 16)

มี 3 วิธีที่แตกต่างกันในการคำนวณค่า tuples เริ่มต้น tuple ตัวที่สองp2จะถูกสับเสมอ เราสามารถเริ่มต้นด้วย tuple 1 ( p1) สั่งโดยa."กำลังสูงสุดลำดับที่ 1" (# 128), b.คำสั่งสับ (# 127) c.และ "อำนาจต่ำสุดลำดับที่ 1" ("อำนาจสูงสุดลำดับสุดท้าย") (# 126)

รูทีนการกระจายdisperseนั้นมีส่วนเกี่ยวข้องมากกว่า แต่แนวคิดไม่ยากนัก อีกครั้งใช้การแลกเปลี่ยน แทนที่จะพยายามเพิ่มประสิทธิภาพการกระจายโดยทั่วไปในทุกองค์ประกอบมันก็พยายามที่จะบรรเทาซ้ำกรณีที่เลวร้ายที่สุดในปัจจุบัน ความคิดที่จะหาสิ่งที่ 1 เซนต์องค์ประกอบแยกย้ายกันน้อยจากซ้ายไปขวา การก่อกวนคือการสลับองค์ประกอบด้านซ้ายหรือขวา ( x, yดัชนี) ของคู่กระจายน้อยที่สุดกับองค์ประกอบอื่น ๆ แต่ไม่เคยมีระหว่างคู่ (ซึ่งจะลดการกระจายตัวเสมอ) และข้ามความพยายามที่จะสลับกับองค์ประกอบเดียวกัน ( selectใน # 71) . mคือดัชนีจุดกึ่งกลางของคู่ (# 65)

อย่างไรก็ตามการกระจายตัวถูกวัด / ปรับให้เหมาะสมกับทั้งทูเปิลในคู่ (# 40) โดยใช้การกระจายแบบ "น้อยที่สุด / ซ้ายสุด" ในแต่ละคู่ (# 25, # 44)

อัลกอริทึมพยายามสลับองค์ประกอบ "ที่ไกลที่สุด" 1 st ( sort_by / reverse# 71)

มีกลยุทธ์ที่แตกต่างกันสองวิธีtrue, falseในการตัดสินใจว่าจะสลับองค์ประกอบด้านซ้ายหรือขวาของคู่กระจายน้อยที่สุด (# 80) ไม่ว่าจะเป็นองค์ประกอบซ้ายสำหรับตำแหน่งสลับไปยังองค์ประกอบซ้าย / ขวาไปทางด้านขวาหรือองค์ประกอบซ้ายหรือขวาที่สุด ในคู่แยกย้ายกันจากองค์ประกอบสลับ

อัลกอริธึมเสร็จสิ้น (# 91) เมื่อไม่สามารถปรับปรุงการกระจายได้อีกต่อไป (ไม่ว่าจะเป็นการย้ายตำแหน่งกระจายที่แย่ที่สุดหรือเพิ่มการกระจายสูงสุดของทั้งคู่ tuple (# 85))

สถิติมีการส่งออกสำหรับการปฏิเสธมากกว่าc= 1,000 derangements ใน 3 วิธี (# 116) และc= 1,000 derangesperses (# 97) โดยดูที่อัลกอริธึมการกระจาย 2 อันสำหรับคู่ที่ถูกแยกจากการปฏิเสธ (# 19, # 106) แทร็กหลังกระจายเฉลี่ยรวม (หลังจากรับประกัน derangement) ตัวอย่างการรันมีดังนี้

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

นี่แสดงให้เห็นว่าa-trueอัลกอริธึมให้ผลลัพธ์ที่ดีที่สุดด้วยการไม่ปล่อย ~ 92% และระยะการกระจายที่แย่ที่สุดโดยเฉลี่ยอยู่ที่ 2.6 และรับประกันขั้นต่ำ 2 มากกว่า 1,000 การทดลองคืออย่างน้อย 1 การแทรกแซงไม่มีองค์ประกอบระหว่างคู่ธาตุเดียวกันทั้งหมด พบวิธีแก้ปัญหาที่สูงถึง 3 องค์ประกอบที่ไม่มีการแทรกแซง

อัลกอริทึมยุ่งเหยิงเป็นเส้นเวลาก่อนการปฏิเสธและอัลกอริทึมการกระจายตัว (ทำงานกับการป้อนข้อมูลวิกลจริต) ดูเหมือนว่าจะเป็นไปได้ ~n)O(nlogn)

1ปัญหาคือการหาการจัดแพ็คเก็ตแบบทดสอบที่ตอบสนองสิ่งที่เรียกว่า "feng shui" [1] หรือ "ดี" การสั่งซื้อแบบสุ่มโดยที่ "ดี" ค่อนข้างเป็นอัตนัย ผู้เขียนปัญหาได้วิเคราะห์ / ลดลงเป็นเกณฑ์ derange / การกระจายตามการวิจัย wrt ชุมชน quizbowl และ "ผู้เชี่ยวชาญฮวงจุ้ยฮวงจุ้ย" [2] มีแนวคิดที่แตกต่างกันสำหรับ "กฎของฮวงจุ้ย" การวิจัยที่ตีพิมพ์ "บางส่วนได้ดำเนินการกับอัลกอริธึมแล้ว แต่ปรากฏในระยะแรก [3]

[1] Packet feng shui / QBWiki

[2] แพ็คเก็ตแบบทดสอบและฮวงจุ้ย / Lifshitz

[3] การจัดวางคำถามฟอรัมศูนย์ทรัพยากร HSQuizbowl

[4] การสร้าง Derangements แบบสุ่ม / Martinez, Panholzer, Prodinger

[5] Sage derangement algorithm (python) / McAndrew


คิดเพิ่มเติมว่ามีข้อผิดพลาดในกิจวัตรประจำวัน derange & มันไม่ได้แปลกประหลาด ตำแหน่งการแลกเปลี่ยนอาจล่วงหน้าโดยไม่ต้องแลกเปลี่ยนอะไร มีการแก้ไขอย่างง่ายเพื่อทดสอบความสำเร็จอย่างถูกต้อง
vzn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.