คำถามติดแท็ก permutations

การเรียงลำดับเป็นการจัดเรียงตัวเลขตามลำดับโดยพลการ 1,,n

3
อัลกอริธึมแบบแทนที่สำหรับการแทรกอาร์เรย์
คุณได้รับองค์ประกอบมากมาย2n2n2n a1,a2,…,an,b1,b2,…bna1,a2,…,an,b1,b2,…bna_1, a_2, \dots, a_n, b_1, b_2, \dots b_n ภารกิจคือการสอดแทรกอาร์เรย์โดยใช้อัลกอริทึมแบบแทนที่ที่อาร์เรย์ผลลัพธ์จะมีลักษณะดังนี้ b1,a1,b2,a2,…,bn,anb1,a1,b2,a2,…,bn,anb_1, a_1, b_2, a_2, \dots , b_n, a_n หากความต้องการในสถานที่ไม่มีเราสามารถสร้างอาร์เรย์และองค์ประกอบการคัดลอกใหม่ที่ให้อัลกอริทึมเวลาO(n)O(n)\mathcal{O}(n) ด้วยความต้องการในสถานที่แบ่งและพิชิตอัลกอริทึมกระแทกขึ้นขั้นตอนวิธีการที่จะเป็นlog)θ(nlogn)θ(nlog⁡n)\theta(n \log n) ดังนั้นคำถามคือ: มีอัลกอริธึมเวลาซึ่งอยู่ในสถานที่ด้วยหรือไม่?O(n)O(n)\mathcal{O}(n) (หมายเหตุ: คุณสามารถสันนิษฐานได้ว่ารูปแบบ WORD RAM ราคาเท่ากันดังนั้นจึงแปลเป็นจำกัด พื้นที่)O(1)O(1)\mathcal{O}(1)

2
เหตุใด C ประเภทโมฆะจึงไม่คล้ายกับประเภทที่ว่าง / ด้านล่าง
Wikipedia ตลอดจนแหล่งข้อมูลอื่น ๆ ที่ฉันได้พบรายการvoidประเภทC เป็นหน่วยประเภทซึ่งตรงข้ามกับประเภทที่ว่างเปล่า ฉันพบว่ามันสับสนเพราะฉันคิดว่าvoidเหมาะกับนิยามของประเภทที่ว่าง / ล่าง ไม่มีค่านิยมใด ๆ อยู่voidเท่าที่ฉันจะบอกได้ ฟังก์ชั่นที่มีประเภทคืนค่าเป็นโมฆะระบุว่าฟังก์ชั่นจะไม่ส่งคืนสิ่งใดดังนั้นจึงสามารถทำงานได้เพียงผลข้างเคียงเท่านั้น ตัวชี้ชนิดvoid*เป็นชนิดย่อยของชนิดตัวชี้อื่นทั้งหมด นอกจากนี้การแปลงไปยังและจากvoid*ใน C นั้นเป็นนัย ผมไม่แน่ใจว่าถ้าจุดสุดท้ายมีบุญใด ๆ ที่เป็นข้อโต้แย้งสำหรับvoidการเป็นประเภทที่ว่างเปล่าเป็นมากหรือน้อยเป็นกรณีพิเศษที่มีความสัมพันธ์ไม่มากที่จะvoid*void ในทางกลับกันvoidตัวมันเองไม่ใช่ประเภทย่อยของประเภทอื่นทั้งหมดซึ่งเท่าที่ฉันสามารถบอกได้ว่าเป็นข้อกำหนดสำหรับประเภทที่จะเป็นประเภทด้านล่าง
28 type-theory  c  logic  modal-logic  coq  equality  coinduction  artificial-intelligence  computer-architecture  compilers  asymptotics  formal-languages  asymptotics  landau-notation  asymptotics  turing-machines  optimization  decision-problem  rice-theorem  algorithms  arithmetic  floating-point  automata  finite-automata  data-structures  search-trees  balanced-search-trees  complexity-theory  asymptotics  amortized-analysis  complexity-theory  graphs  np-complete  reductions  np-hard  algorithms  string-metrics  computability  artificial-intelligence  halting-problem  turing-machines  computation-models  graph-theory  terminology  complexity-theory  decision-problem  polynomial-time  algorithms  algorithm-analysis  optimization  runtime-analysis  loops  turing-machines  computation-models  recurrence-relation  master-theorem  complexity-theory  asymptotics  parallel-computing  landau-notation  terminology  optimization  decision-problem  complexity-theory  polynomial-time  counting  coding-theory  permutations  encoding-scheme  error-correcting-codes  machine-learning  natural-language-processing  algorithms  graphs  social-networks  network-analysis  relational-algebra  constraint-satisfaction  polymorphisms  algorithms  graphs  trees 

2
มีอะไรที่ยากกว่า: การสับสำรับที่เรียงแล้วหรือการเรียงสับแบบสับ
คุณมีอาร์เรย์ขององค์ประกอบที่แตกต่างกันคุณสามารถเข้าถึงตัวเปรียบเทียบ (ฟังก์ชันกล่องดำที่รับสององค์ประกอบaและbและคืนค่าจริง iff a &lt; b ) และแหล่งบิตสุ่มอย่างแท้จริง (ฟังก์ชันกล่องดำไม่มีอาร์กิวเมนต์และคืนบิตสุ่มแบบสุ่มอย่างสม่ำเสมอ) พิจารณางานสองอย่างต่อไปนี้:nnnaaabbba&lt;ba&lt;ba < b อาร์เรย์ถูกเรียงในขณะนี้ ผลิตการเรียงสับเปลี่ยนที่เลือกแบบสุ่ม (หรือโดยประมาณอย่างสม่ำเสมอ) อาร์เรย์ประกอบด้วยการเรียงสับเปลี่ยนที่เลือกอย่างสม่ำเสมอโดยการสุ่มโดยธรรมชาติ สร้างอาร์เรย์ที่เรียงลำดับ คำถามของฉันคือ งานใดที่ต้องใช้พลังงานมากขึ้น ฉันไม่สามารถนิยามคำถามได้อย่างแม่นยำมากขึ้นเพราะฉันไม่รู้เกี่ยวกับการเชื่อมต่อระหว่างทฤษฎีสารสนเทศอุณหพลศาสตร์หรืออะไรก็ตามที่จำเป็นในการตอบคำถามนี้ อย่างไรก็ตามฉันคิดว่าคำถามสามารถสร้างได้อย่างชัดเจน (และหวังว่าจะมีคนช่วยฉันด้วยคำตอบนี้!) ตอนนี้อัลกอริทึมปรีชาของฉันคือพวกมันเท่ากัน ขอให้สังเกตว่าการเรียงลำดับทั้งหมดเป็นการสลับกลับกันและในทางกลับกัน การเรียงลำดับต้องใช้รถในขณะที่สับเพราะมันหยิบเปลี่ยนแปลงสุ่มจากn ! ตัวเลือกต้องใช้log n ! ≈ n log nบิตแบบสุ่ม ทั้งการสับและการเรียงต้องใช้n swapslogn!≈nlognlog⁡n!≈nlog⁡n\log n! \approx n \log nn!n!n!logn!≈nlognlog⁡n!≈nlog⁡n\log n! \approx n \log nnnn อย่างไรก็ตามฉันรู้สึกว่าควรมีคำตอบที่ใช้หลักการของ Landauerซึ่งบอกว่าต้องใช้พลังงานในการ "ลบ" เล็กน้อย ฉันคิดว่านี่หมายถึงการเรียงลำดับอาร์เรย์นั้นยากกว่าเพราะต้องใช้ …

1
ปัญหาที่น่าสนใจในการเรียงลำดับ
รับหลอดที่มีลูกหมายเลข (สุ่ม) หลอดมีรูสำหรับถอดลูกบอล พิจารณาขั้นตอนต่อไปนี้สำหรับการดำเนินการหนึ่ง: คุณสามารถเลือกหนึ่งลูกหรือมากกว่าจากหลุมและจดจำลำดับที่คุณเลือกลูกบอล คุณจำเป็นต้องเอียงท่อไปทางด้านซ้ายเพื่อให้ลูกบอลที่เหลืออยู่ในท่อเลื่อนไปทางซ้ายและใช้พื้นที่ว่างที่สร้างขึ้นโดยการเอาลูกบอลออก คุณไม่ควรเปลี่ยนลำดับที่คุณเลือกลูกบอลหมายเลขจากท่อ ตอนนี้คุณนำมันกลับมาอีกครั้งในท่อโดยใช้พื้นที่ว่างที่สร้างโดยการเคลื่อนที่ของลูกบอล ขั้นตอนที่ 1 ถึง 3 ถือเป็นการดำเนินการครั้งเดียว ค้นหาการดำเนินงานขั้นต่ำที่จำเป็นในการเรียงลำดับลูกบอลหมายเลขตามลำดับจากน้อยไปหามาก ตัวอย่างเช่น: ถ้าหลอดมี: [ 1 4 2 3 5 6 ] [1 4 2 3 5 6][1\ 4\ 2\ 3\ 5\ 6] จากนั้นเราสามารถนำ444และ555และ666และถ้าเราเอียงท่อไปทางซ้ายเราจะได้[ 1 2 3 ] [1 2 3][1\ 2\ 3]และเราแทรก( 4 5 6 ) (4 …

2
การเรียงลำดับพีชคณิตที่มีองค์ประกอบไม่ตรงกับดัชนี± M
ฉันเพิ่งถูกถามถึงปัญหานี้ในการสัมภาษณ์อัลกอริทึมและไม่สามารถแก้ไขได้ กำหนดสองค่า N และ M คุณต้องนับจำนวนพีชคณิตของความยาว N (โดยใช้ตัวเลขตั้งแต่ 1 ถึง N) ซึ่งความแตกต่างที่แน่นอนระหว่างตัวเลขใด ๆ ในการเปลี่ยนแปลงและตำแหน่งในการเปลี่ยนแปลงไม่เท่ากับ M ตัวอย่าง - ถ้า N = 3 และ M = 1 ดังนั้น 1 2 3 และ 3 2 1 คือการเรียงสับเปลี่ยนที่ถูกต้อง แต่ 1 3 2 ไม่ถูกต้องเนื่องจากหมายเลข 3 อยู่ที่ตำแหน่ง 2 และความแตกต่างคือ = M ฉันลองใช้การเขียนโปรแกรม NxM Dynamic แต่ไม่สามารถเกิดซ้ำได้ซึ่งไม่นับการทำซ้ำ

2
อัลกอริทึมที่มีประสิทธิภาพในการสร้างการกระจายสองแบบเรียงสับเปลี่ยนของชุดมัลติเซ็ตที่สุ่ม
พื้นหลัง \newcommand\ms[1]{\mathsf #1}\def\msD{\ms D}\def\msS{\ms S}\def\mfS{\mathfrak S}\newcommand\mfm[1]{#1}\def\po{\color{#f63}{\mfm{1}}}\def\pc{\color{#6c0}{\mfm{c}}}\def\pt{\color{#08d}{\mfm{2}}}\def\pth{\color{#6c0}{\mfm{3}}}\def\pf{4}\def\pv{\color{#999}5}\def\gr{\color{#ccc}}\let\ss\grสมมติว่าฉันมีสองสำหรับกระบวนการที่เหมือนกันของnnnหินอ่อน แต่ละหินอ่อนสามารถเป็นหนึ่งในcccสีที่c≤nc≤nc≤nc≤nให้ninin_iแทนจำนวนหินอ่อนสีiiiในแต่ละชุด ให้SS\msSเป็นมัลติเซ็ต{1,…,1n1,2,…,2n2,…,1c,…,cnc}{1,…,1⏞n1,2,…,2⏞n2,…,1c,…,c⏞nc}\small\{\overbrace{\po,…,\po}^{n_1},\;\overbrace{\pt,…,\pt}^{n_2},\;…,\;\overbrace{\vphantom 1\pc,…,\pc}^{n_c}\}แทนหนึ่งชุด ในการเป็นตัวแทนความถี่ , SS\msSนอกจากนี้ยังสามารถเขียนเป็น(1n12n2…cnc)(1n12n2…cnc)(\po^{n_1} \;\pt^{n_2}\; … \;\pc^{n_c}){n_c}) จำนวนการเรียงสับเปลี่ยนที่แตกต่างกันของSS\msSนั้นมอบโดยMultinomial : |SS|=(nn1,n2,…,nc)=n!n1!n2!⋯nc!=n!∏i=1c1ni!.|SS|=(nn1,n2,…,nc)=n!n1!n2!⋯nc!=n!∏i=1c1ni!.\left|\mfS_{\msS}\right|=\binom{n}{n_1,n_2,\dots,n_c}=\frac{n!}{n_1!\,n_2!\cdots n_c!}=n! \prod_{i=1}^c \frac1{n_i!}. คำถาม มีอัลกอริทึมที่มีประสิทธิภาพในการสร้างการกระจายสองแบบเรียงสับเปลี่ยนPPPและQQQของSS\msSที่สุ่มหรือไม่ (การกระจายควรเป็นแบบเดียวกัน) เปลี่ยนแปลงPPPคือกระจายถ้าองค์ประกอบที่แตกต่างกันทุกiiiของPPPกรณีของiiiมีระยะห่างออกไปประมาณเท่า ๆ กันในPPPP ตัวอย่างเช่นสมมติว่าS=(1424)={1,1,1,1,2,2,2,2}S=(1424)={1,1,1,1,2,2,2,2}\msS=(\po^4\;\pt^4)=\{\po,\po,\po,\po,\pt,\pt,\pt,\pt\}\} {1,1,1,2,2,2,2,1}{1,1,1,2,2,2,2,1}\{\po, \po, \po, \pt, \pt, \pt, \pt, \po\}ไม่กระจาย {1,2,1,2,1,2,1,2}{1,2,1,2,1,2,1,2}\{\po, \pt, \po, \pt, \po, \pt, \po, \pt\}กระจาย อย่างจริงจังมากขึ้น: หากมีเพียงหนึ่งตัวอย่างของไป“พื้นที่ออก” ในเพื่อให้ 0ni=1ni=1n_i=1iiiPPPΔ(i)=0Δ(i)=0\Delta(i)=0 มิฉะนั้นให้เป็นระยะห่างระหว่างอินสแตนซ์ และอินสแตนซ์ …

1
จัดทำดัชนีในฐานข้อมูลรูปแบบ - โซลูชันคิวบ์ของ Optimal Rubik ของ Korf
ในฐานะที่เป็นโครงการที่สนุกฉันได้ทำงานเกี่ยวกับการใช้ C # ของ Richard Korf - การค้นหาโซลูชันที่เหมาะสมที่สุดกับ Cube ของ Rubik โดยใช้ฐานข้อมูลรูปแบบ https://www.cs.princeton.edu/courses/archive/fall06/cos402/papers/korfrubik.pdf ฉันใช้งานได้จริงฉันแค่พยายามปรับปรุงวิธีแก้ปัญหาของฉัน สิ่งหนึ่งที่ Korf จ้องมองในกระดาษของเขาคือวิธีที่เขาเก็บและจัดทำดัชนีลงในฐานข้อมูลรูปแบบ ฉันคิดว่าเราต้องการใช้ตัวอย่างของลูกบาศก์รูบิคเพื่อสร้างดัชนีเป็นอาร์เรย์ คำถามของฉันเกี่ยวกับวิธีที่ดีที่สุดในการสร้างดัชนีนี้ ทางออกของฉันคือการสร้างแฮชที่สมบูรณ์แบบน้อยที่สุด สิ่งนี้เกี่ยวข้องกับการรักษาคิวบ์ทั้งหมดไว้ในหน่วยความจำจนกว่าฉันจะค้นพบฐานข้อมูลรูปแบบทั้งหมดจากนั้นสร้างแฮชที่สมบูรณ์แบบเพียงเล็กน้อยจากนั้น MPH ใช้เวลาสองสามชั่วโมงในการรันขึ้นอยู่กับขนาดฐานข้อมูลรูปแบบ แต่ฉันต้องทำเพียงครั้งเดียวนับตั้งแต่ฉันบันทึกลงดิสก์ ในท้ายที่สุดฉันสามารถโยนก้อนเองเก็บเฉพาะ MPH ด้วยวิธีนี้ฉันสามารถใช้ลูกบาศก์ของรูบิคแบบสุ่มใช้รูปแบบจากนั้นค้นหาดัชนีอาร์เรย์ใน MPH เพื่อรับความยาวของโซลูชันโดยประมาณ ฉันเชื่อว่า Korf และ Shultz อธิบายวิธีที่ดีกว่าในการกำหนดดัชนีของคิวบ์ในกระดาษ 2548 ของพวกเขาที่เรียกว่า "การค้นหาแบบกว้างขนาดใหญ่ - การค้นหาครั้งแรก" https://www.aaai.org/Papers/AAAI/2005/AAAI05-219.pdf บทความนี้อธิบายถึงอัลกอริทึมในการสร้างดัชนีโดยอ้างอิงจากการเรียงลำดับพจนานุกรมของการเปลี่ยนแปลง โดยทั่วไปคุณสามารถหาการเปลี่ยนแปลง {1, 2, 3} และคิดว่ามันเล็กที่สุดโดยมีดัชนีเป็น 0 {1, 3, 2} …

2
ค้นหาการสั่งซื้อที่ดีที่สุด
ฉันเจอปัญหานี้และกำลังดิ้นรนเพื่อหาวิธีแก้ไข ความคิดใด ๆ ที่จะได้รับการชื่นชมอย่างมาก! สมมติว่าเราได้รับเมทริกซ์ตัวอย่างเช่น{ - 1 , 0 , 1}n × k {−1,0,1}n × k\{-1, 0, 1\}^{n\ \times\ k} ⎡⎣⎢⎢⎢⎢⎢⎢1- 10- 11001- 101010000010- 11- 11- 1⎤⎦⎥⎥⎥⎥⎥⎥[1010−1−100010110−1−1−10111000−1]\begin{bmatrix} 1 & 0 & 1 & 0 & -1 \\ -1 & 0 & 0 & 0 & 1 \\ 0 & 1 …

2
มีอัลกอริทึม "การเรียงลำดับ" ซึ่งส่งกลับค่าการสุ่มเมื่อใช้ตัวเปรียบเทียบแบบพลิกเหรียญหรือไม่?
แรงบันดาลใจจากคำถามนี้ที่ผู้ถามต้องการทราบว่าเวลาทำงานเปลี่ยนไปเมื่อตัวเปรียบเทียบที่ใช้ในอัลกอริธึมการค้นหามาตรฐานถูกแทนที่ด้วยการพลิกเหรียญอย่างยุติธรรมและความล้มเหลวที่โดดเด่นของ Microsoft ในการเขียนเครื่องกำเนิดการเปลี่ยนแปลงแบบสม่ำเสมอ : มีอัลกอริทึมการเรียงลำดับแบบอิงซึ่งจะขึ้นอยู่กับการนำไปใช้ของตัวเปรียบเทียบ: คืนองค์ประกอบในลำดับที่เรียงเมื่อใช้ตัวเปรียบเทียบที่แท้จริง (นั่นคือการเปรียบเทียบทำตามที่เราคาดหวังในอัลกอริทึมการเรียงลำดับมาตรฐาน) ส่งคืนการเปลี่ยนแปลงการสุ่มอย่างสม่ำเสมอขององค์ประกอบเมื่อตัวเปรียบเทียบถูกแทนที่ด้วยการพลิกเหรียญอย่างยุติธรรม (นั่นคือกลับx &lt; y = trueด้วยความน่าจะเป็น 1/2 โดยไม่คำนึงถึงค่าของ x และ y) รหัสสำหรับอัลกอริทึมการเรียงลำดับจะต้องเหมือนกัน มันเป็นเพียงรหัสในการเปรียบเทียบ "กล่องดำ" ที่ได้รับอนุญาตให้เปลี่ยน

3
การค้นหาจำนวนองค์ประกอบที่เล็กลงสำหรับแต่ละองค์ประกอบในอาเรย์อย่างมีประสิทธิภาพ
ฉันติดอยู่กับปัญหานี้: รับอาร์เรย์ AAA ของแรก nnn ตัวเลขธรรมชาติที่มีการเรียงสับเปลี่ยนแบบสุ่มอาร์เรย์ BBB ถูกสร้างขึ้นเช่นนั้น B(k)B(k)B(k) คือจำนวนองค์ประกอบจาก A(1)A(1)A(1) ถึง A ( k - 1 )A(k−1)A(k-1) ซึ่งเล็กกว่า A(k)A(k)A(k). ฉัน) ได้รับ AAA คุณสามารถหา BBB ใน O(n)O(n)O(n)เวลา? ii) ให้ไว้BBB คุณสามารถหา AAA ใน O(n)O(n)O(n) เวลา? ที่นี่ B(1)=0B(1)=0B(1) = 0. สำหรับตัวอย่างที่เป็นรูปธรรม: ∣∣∣AB804030107321966454∣∣∣|A843172965B000031644|\begin{vmatrix} A & 8 & 4 & 3 & 1 & …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.