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

อัลกอริทึมเป็นลำดับขั้นตอนที่กำหนดไว้อย่างดีซึ่งกำหนดวิธีแก้ปัญหาแบบนามธรรมให้กับปัญหา ใช้แท็กนี้เมื่อปัญหาของคุณเกี่ยวข้องกับการออกแบบและวิเคราะห์อัลกอริทึม

1
วิธีพื้นฐานคือ matroids และ greedoids ในการออกแบบอัลกอริทึม?
ในขั้นต้นmatroidsถูกนำไปพูดคุยความคิดของการเป็นอิสระเชิงเส้นของชุดของส่วนย่อยที่บางชุดพื้นดินฉันปัญหาบางอย่างที่มีโครงสร้างนี้อนุญาตให้อัลกอริทึมโลภค้นหาวิธีแก้ปัญหาที่ดีที่สุด แนวคิดของgreedoidsต่อมาได้รับการแนะนำให้รู้จักกับโครงสร้างทั่วไปนี้เพื่อจับปัญหามากขึ้นที่ช่วยให้การแก้ปัญหาที่ดีที่สุดที่จะพบได้โดยวิธีการโลภEEEผมผมI โครงสร้างเหล่านี้เกิดขึ้นบ่อยเพียงใดในการออกแบบอัลกอริทึม นอกจากนี้บ่อยครั้งที่อัลกอริทึมโลภมักจะไม่สามารถจับภาพสิ่งที่จำเป็นในการค้นหาคำตอบที่ดีที่สุด แต่อาจยังพบวิธีแก้ปัญหาที่ดีโดยประมาณ (ตัวอย่างเช่นการบรรจุในถังขยะ) ระบุว่ามีวิธีวัดว่า "ปิด" ปัญหาคือ greedoid หรือ matroid หรือไม่?

5
วิธีการเข้าหา Vertical Sticks ที่ท้าทาย
คำถามนี้ถูกย้ายจาก Theoretical Computer Science Exchange Exchange เนื่องจากสามารถตอบได้ใน Computer Science Stack Exchange อพยพ 7 ปีที่ผ่านมา ปัญหานี้มาจากinterviewstreet.com เราจะได้รับอาร์เรย์ของจำนวนเต็มY={y1,...,yn}Y={y1,...,yn}Y=\{y_1,...,y_n\}ที่แสดงถึงnnnกลุ่มสายดังกล่าวที่จุดปลายของส่วนiiiเป็น(i,0)(i,0)(i, 0)และ(i,yi)(i,yi)(i, y_i) ) ลองจินตนาการว่าจากด้านบนของแต่ละส่วนรังสีแนวนอนจะถูกยิงไปทางซ้ายและรังสีนี้จะหยุดเมื่อสัมผัสกับส่วนอื่นหรือกระทบกับแกน y เราสร้างอาร์เรย์ของจำนวนเต็ม n เป็นv1,...,vnv1,...,vnv_1, ..., v_nที่viviv_iเท่ากับความยาวของการยิงเรย์จากด้านบนของส่วนที่ฉันiiiเรากำหนดV(y1,...,yn)=v1+...+vnV(y1,...,yn)=v1+...+vnV(y_1, ..., y_n) = v_1 + ... + v_n n ตัวอย่างเช่นถ้าเรามีY=[3,2,5,3,3,4,1,2]Y=[3,2,5,3,3,4,1,2]Y=[3,2,5,3,3,4,1,2]แล้ว[v1,...,v8]=[1,1,3,1,1,3,1,2][v1,...,v8]=[1,1,3,1,1,3,1,2][v_1, ..., v_8] = [1,1,3,1,1,3,1,2] , ดังที่แสดงในภาพด้านล่าง: สำหรับการเปลี่ยนแปลงแต่ละpppของ[1,...,n][1,...,n][1,...,n]เราสามารถคำนวณV(yp1,...,ypn)V(yp1,...,ypn)V(y_{p_1}, ..., y_{p_n}) ) ถ้าเราเลือกการเปลี่ยนแปลงสุ่มสม่ำเสมอพีppของ[ 1 , . …

1
มีอัลกอริทึมที่มีประสิทธิภาพสำหรับปัญหาการครอบรอบจุดสุดยอดนี้หรือไม่?
คำถามนี้ถูกย้ายจาก Mathematics Stack Exchange เพราะสามารถตอบได้ใน Computer Science Stack Exchange อพยพ 3 ปีที่แล้ว ฉันพยายามค้นหาอัลกอริธึมเพื่อหาจุดสุดยอดวงรอบสูงสุดของกราฟกำกับ - นั่นคือชุดของวงรอบที่แยกจากกันซึ่งมีจุดยอดทั้งหมดในกับรอบที่มากที่สุดเท่าที่จะเป็นไปได้ (เราไม่พิจารณา จุดยอดบุคคลรอบที่นี่) ฉันรู้ว่าปัญหาในการค้นหาจุดสุดยอดวงรอบขั้นต่ำเช่นเดียวกับการค้นหาจุดสุดยอดวงรอบที่มีรอบคือ NP-complete แต่กรณีสูงสุดคืออะไร?G kGGGGGGkkk ในขณะที่ฉันจะหาคำตอบสำหรับสิ่งที่น่าสนใจนี้โดยทั่วไปกราฟที่ฉันต้องการใช้สำหรับสิ่งนี้ถูก จำกัด โดยการก่อสร้างของพวกเขาดังนั้นแม้ว่าปัญหานั้นจะเกิดจากปัญหา NP-complete อาจจะมีคำตอบพหุนามสำหรับอินสแตนซ์เหล่านี้ เรามีรายการจำนวนเต็ม , องค์ประกอบและเราจะใช้ , องค์ประกอบเพื่ออ้างถึงหลังจากเรียงลำดับแล้ว ตัวอย่างเช่น:ลิตรฉัน S s ฉัน LLLLล.ผมlil_iSSSsผมsis_iLLL L = ( 1 , 3 , 2 , 5 , 0 , 7 …

3
ทำไมเป็น Radix เรียง
ในการเรียงลำดับ radix เราแรกเรียงตามเลขนัยสำคัญน้อยที่สุดจากนั้นเราเรียงตามหลักนัยสำคัญที่น้อยที่สุดรองและอื่น ๆ และจบลงด้วยรายการที่เรียงลำดับ ตอนนี้ถ้าเรามีรายการหมายเลขเราต้องการบิตเพื่อแยกความแตกต่างระหว่างตัวเลขเหล่านั้น ดังนั้นจำนวนกี่เรียงผ่านที่เราทำจะเป็นn แต่ละรอบใช้เวลาและด้วยเหตุนี้เวลาทำงานของการเรียง Radix คือnnnlognlog⁡n\log nlognlog⁡n\log nO(n)O(n)O(n)O(nlogn)O(nlog⁡n)O(n \log n) แต่เป็นที่ทราบกันดีว่าเป็นอัลกอริธึมเชิงเส้นเวลา ทำไม?

7
องค์ประกอบหนึ่งที่แตกต่างกันในสองอาร์เรย์ วิธีการค้นหาอย่างมีประสิทธิภาพ?
ฉันกำลังเตรียมการสัมภาษณ์การเขียนโปรแกรมและฉันไม่สามารถหาวิธีที่มีประสิทธิภาพที่สุดในการแก้ปัญหานี้ได้ สมมติว่าเรามีสองอาร์เรย์ประกอบด้วยตัวเลขที่ไม่เรียงกัน Array 2 มีหมายเลขที่ Array 1 ไม่มี ทั้งสองอาร์เรย์มีหมายเลขที่ตั้งแบบสุ่มไม่จำเป็นต้องอยู่ในลำดับเดียวกันหรือในดัชนีเดียวกัน ตัวอย่างเช่น: Array 1 [78,11, 143, 84, 77, 1, 26, 35 .... n] Array 2 [11,84, 35, 25, 77, 78, 26, 143 ... 21 ... n + 1] อัลกอริทึมที่เร็วที่สุดสำหรับการค้นหาหมายเลขที่แตกต่างคืออะไร? เวลาทำงานคืออะไร ในตัวอย่างนี้จำนวนที่เราจะค้นหาคือ 21 ความคิดของฉันคือการทำงานผ่าน Array 1 และลบค่านั้นออกจากอาร์เรย์ 2 ซ้ำแล้วซ้ำอีกจนกว่าคุณจะเสร็จสิ้น นี่ควรจะเป็นเวลาประมาณใช่ไหม?O ( n บันทึกn …

3
อัลกอริทึมเพื่อลดพื้นที่ผิวปริมาณที่กำหนด
พิจารณางานอัลกอริทึมต่อไปนี้: อินพุต: จำนวนเต็มบวกพร้อมกับการแยกตัวประกอบเฉพาะของการ ค้นหา: จำนวนเต็มบวกที่ลดขึ้นอยู่กับข้อ จำกัด ที่x , y , z x y + y z + x z x y z = nnnnx , y, zx,y,zx,y,zx y+ yZ+ x zxy+yz+xzxy+yz+xzx yZ= nxyz=nxyz=n ความซับซ้อนของปัญหานี้คืออะไร? มีอัลกอริธึมเวลาพหุนามหรือไม่? มันเป็น NP-hard หรือไม่? ปัญหานี้ถามโดยทั่วไปว่า: จากของแข็งที่เป็นรูปสี่เหลี่ยมผืนผ้าทั้งหมดที่มีปริมาตรเป็นและมิติใดเป็นจำนวนเต็มทั้งหมดอันใดที่มีพื้นที่ผิวน้อยที่สุดnnn ปัญหานี้เกิดขึ้นจาก Dan Meyer ภายใต้ชื่อThe Problem Problem ที่อาจารย์คณิตศาสตร์ 1,000 คนไม่สามารถแก้ไขได้ จนถึงขณะนี้ไม่มีครูคณิตศาสตร์ที่เขาทำงานด้วยได้พบอัลกอริทึมที่เหมาะสมสำหรับปัญหานี้ …

4
ไม่มีอัลกอริทึมการเรียงลำดับพร้อมคุณสมบัติที่ต้องการทั้งหมดหรือไม่?
บนเว็บไซต์อัลกอริทึมการเรียงลำดับจะทำการอ้างสิทธิ์ต่อไปนี้: อัลกอริทึมการเรียงลำดับในอุดมคติจะมีคุณสมบัติดังต่อไปนี้: มีเสถียรภาพ: คีย์ที่เท่าเทียมกันจะไม่ถูกจัดลำดับใหม่ ทำงานในสถานที่ที่ต้องการพื้นที่เพิ่มเติมO ( 1 )O(1)O(1) การเปรียบเทียบคีย์แย่ที่สุดO ( n ⋅ lg)( n ) )O(n⋅LG⁡(n))O(n\cdot\lg(n)) กรณีที่เลวร้ายที่สุดในการแลกเปลี่ยนO ( n )O(n)O(n) Adaptive: เพิ่มความเร็วสูงถึงเมื่อข้อมูลเกือบจะถูกจัดเรียงหรือเมื่อมีคีย์เฉพาะไม่กี่ตัวO ( n )O(n)O(n) ไม่มีอัลกอริทึมที่มีคุณสมบัติเหล่านี้ทั้งหมดดังนั้นตัวเลือกการเรียงลำดับอัลกอริทึมจึงขึ้นอยู่กับแอปพลิเคชัน คำถามของฉันคือจริงหรือไม่ ไม่มีอัลกอริทึม [การเรียงลำดับ] ที่มีคุณสมบัติเหล่านี้ทั้งหมด และถ้าเป็นเช่นนั้นทำไม มันเกี่ยวกับคุณสมบัติเหล่านี้ที่ทำให้พวกเขาทั้งหมดเป็นไปไม่ได้ที่จะเติมเต็ม?

4
จำนวนการเปรียบเทียบน้อยที่สุดจำเป็นต้องเรียงลำดับ (เรียงลำดับ) 5 องค์ประกอบ
ค้นหาจำนวนการเปรียบเทียบที่น้อยที่สุดที่จำเป็นในการจัดเรียง (เรียงลำดับ) ห้าองค์ประกอบและกำหนดอัลกอริทึมที่เรียงลำดับองค์ประกอบเหล่านี้โดยใช้การเปรียบเทียบจำนวนนี้ การแก้ไข :มี 5! = 120 ผลลัพธ์ที่เป็นไปได้ ดังนั้นต้นไม้ไบนารีสำหรับขั้นตอนการเรียงลำดับจะมีอย่างน้อย 7 ระดับ ที่จริงแล้ว ≥ 120 หมายถึง h ≥ 7. แต่การเปรียบเทียบ 7 ครั้งนั้นไม่เพียงพอ จำนวนการเปรียบเทียบที่น้อยที่สุดที่จำเป็นในการจัดเรียง (เรียงลำดับ) ห้าองค์ประกอบคือ 82h2ชั่วโมง2^hhชั่วโมงh นี่คือคำถามจริงของฉัน: ฉันพบอัลกอริทึมที่ทำในการเปรียบเทียบ 8 แต่ฉันจะพิสูจน์ได้อย่างไรว่าไม่สามารถทำได้ในการเปรียบเทียบ 7 รายการ

2
รากฐานทางทฤษฎีของการแบ่งแยกและการพิชิต
เมื่อพูดถึงการออกแบบอัลกอริธึมมักใช้เทคนิคต่อไปนี้: การเขียนโปรแกรมแบบไดนามิก กลยุทธ์โลภ แบ่งและพิชิต ในขณะที่วิธีการสองวิธีแรกมีรากฐานทางทฤษฎีที่รู้จักกันดีคือหลักการของ Bellman Optimality และ matroid (resp. greedoid) ทฤษฎีฉันไม่สามารถหากรอบทั่วไปสำหรับอัลกอริธึมตาม D&C ประการแรกฉันตระหนักถึงบางสิ่งบางอย่างที่เรา (หรือมากกว่าผู้เชี่ยวชาญ) ที่แนะนำในคลาสการเขียนโปรแกรมใช้งานได้เรียกว่า "โครงกระดูกอัลกอริทึม" ที่เกิดขึ้นในบริบทของ combinators ตัวอย่างของที่นี่เราให้โครงกระดูกดังกล่าวสำหรับอัลกอริธึม D&C ดังนี้: คำนิยาม : ปล่อยให้เป็นเซตที่ไม่ว่างเปล่า เราเรียกองค์ประกอบของโซลูชั่นและองค์ประกอบของ (นั่นคือส่วนย่อยของ) จะเรียกว่าเป็นปัญหา จากนั้นD & C- โครงกระดูกคือ tuple 4โดยที่:SA,SA,SA,SSSS AP:=P(A)P:=P(A)P:=\mathfrak{P}(A)AAA(Pβ,β,D,C)(Pβ,β,D,C)(P_\beta, \beta, \mathcal{D}, \mathcal{C}) PβPβP_\betaเป็นกริยามากกว่าชุดของปัญหาและเราบอกว่าปัญหาที่เกิดขึ้นเป็นพื้นฐาน IFFถือpppPβ(p)Pβ(p)P_\beta(p) ββ\betaเป็นการแมปที่กำหนดวิธีแก้ปัญหาสำหรับปัญหาพื้นฐานแต่ละข้อPβ→SPβ→SP_\beta \rightarrow S DD\mathcal{D}คือการแมป ที่แบ่งแต่ละปัญหาออกเป็นชุดย่อยของปัญหาP→P(P)P→P(P)P \rightarrow \mathfrak{P}(P) CC\mathcal{C}คือการทำแผนที่ที่เข้าร่วมการแก้ปัญหา (ขึ้นอยู่กับชนิดของ "ปัญหาการหมุน") …

3
ปัญหาการแปลง (คณิตศาสตร์) เป็นอินสแตนซ์ SAT
สิ่งที่ฉันต้องการทำคือเปลี่ยนปัญหาทางคณิตศาสตร์ที่ฉันมีให้เป็นปัญหาความพึงพอใจแบบบูลีน (SAT) แล้วแก้ไขมันโดยใช้ SAT Solver ฉันสงสัยว่ามีคนรู้จักคู่มือคำแนะนำหรืออะไรก็ตามที่จะช่วยฉันแปลงปัญหาเป็นอินสแตนซ์ SAT นอกจากนี้ฉันต้องการที่จะแก้ปัญหานี้ในเวลาที่ดีกว่าชี้แจง ฉันหวังว่า SAT Solver จะช่วยฉัน

1
ระยะทางที่สั้นที่สุดเปลี่ยนไปมากแค่ไหนเมื่อเพิ่มขอบเข้ากับกราฟ
ให้เป็นกราฟที่สมบูรณ์, มีน้ำหนัก, ไม่ระบุทิศทาง เราสร้างกราฟสองG ' = ( V , E ' )โดยการเพิ่มขอบหนึ่งโดยหนึ่งจากEไปE ' เราเพิ่มขอบΘ ( | V | )ลงในG ′ทั้งหมดG=(V,E)G=(V,E)G=(V,E)G′=(V,E′)G′=(V,E′)G'=(V, E')EEEE′E′E'Θ(|V|)Θ(|V|)\Theta(|V|)G′G′G' ทุกครั้งที่เราเพิ่มอีกหนึ่งขอบเพื่อE 'เราจะพิจารณาในระยะทางที่สั้นที่สุดระหว่างคู่ทั้งหมดใน( V , E ' )และ( V , E ' ∪ { ( U , V ) } ) เรานับจำนวนของระยะทางที่สั้นที่สุดเหล่านี้มีการเปลี่ยนแปลงเป็นผลมาจากการเพิ่ม( U , V ) ให้C iเป็นระยะทางที่สั้นที่สุดที่เปลี่ยนไปเมื่อเราเพิ่มi(u,v)(u,v)(u,v)E′E′E'(V,E′)(V,E′)(V, E')(V,E′∪{(u,v)})(V,E′∪{(u,v)})(V, E' …

4
การเรียงลำดับอัลกอริธึมที่ยอมรับตัวเปรียบเทียบแบบสุ่ม
อัลกอริทึมการเรียงแบบทั่วไปโดยทั่วไปจะใช้ชุดข้อมูลเพื่อจัดเรียงและฟังก์ชันตัวเปรียบเทียบซึ่งสามารถเปรียบเทียบองค์ประกอบสองอย่าง หากตัวเปรียบเทียบเป็นความสัมพันธ์ตามลำดับ output ผลลัพธ์ของอัลกอริทึมจะเป็นรายการ / อาร์เรย์ที่เรียงลำดับ ฉันสงสัยว่าอัลกอริธึมการเรียงลำดับใดที่จะใช้งานร่วมกับเครื่องมือเปรียบเทียบที่ไม่ใช่ความสัมพันธ์ในการสั่งซื้อ (โดยเฉพาะอย่างยิ่งที่ส่งคืนผลลัพธ์แบบสุ่มในการเปรียบเทียบแต่ละครั้ง) โดย "งาน" ฉันหมายถึงที่นี่ว่าพวกเขายังคงกลับมาเรียงลำดับของข้อมูลของพวกเขาและเรียกใช้ที่ซับซ้อนเวลาของพวกเขามักจะอ้างถึง (ตรงข้ามกับการย่อยสลายไปยังสถานการณ์กรณีที่เลวร้ายที่สุดเสมอ การเรียงลำดับของผลลัพธ์จะไม่ได้กำหนดอย่างไรก็ตาม ยิ่งไปกว่านั้นการเรียงลำดับผลลัพธ์จะเป็นการกระจายแบบสม่ำเสมอเมื่อตัวเปรียบเทียบเป็นแบบพลิกเหรียญ จากการคำนวณทางจิตคร่าวๆของฉันดูเหมือนว่าการเรียงแบบผสานจะดีกับสิ่งนี้และรักษาค่าใช้จ่ายรันไทม์เท่าเดิมและสร้างการสั่งซื้อแบบสุ่มอย่างยุติธรรม ฉันคิดว่าบางสิ่งบางอย่างเช่นการเรียงลำดับอย่างรวดเร็วอาจทำให้เสื่อมโทรมอาจไม่เสร็จและไม่ยุติธรรม อัลกอริทึมการเรียงลำดับอื่นใด (นอกเหนือจากการจัดเรียงผสาน) จะทำงานตามที่อธิบายไว้ด้วยตัวเปรียบเทียบแบบสุ่มหรือไม่ สำหรับการอ้างอิงตัวเปรียบเทียบคือลำดับความสัมพันธ์ถ้ามันเป็นฟังก์ชันที่เหมาะสม (กำหนดขึ้น) และสอดคล้องกับหลักการของความสัมพันธ์ของลำดับ: มันเป็นการกำหนดขึ้น: compare(a,b)สำหรับสิ่งใดสิ่งหนึ่งaและbส่งกลับผลลัพธ์เดียวกันเสมอ มันเป็นสกรรมกริยา: compare(a,b) and compare(b,c) implies compare( a,c ) มันเป็น antisymmetric compare(a,b) and compare(b,a) implies a == b (สมมติว่าองค์ประกอบอินพุตทั้งหมดนั้นแตกต่างกันดังนั้นการสะท้อนกลับจึงไม่เป็นปัญหา) เครื่องมือเปรียบเทียบแบบสุ่มละเมิดกฎเหล่านี้ทั้งหมด อย่างไรก็ตามมีผู้เปรียบเทียบที่ไม่ได้มีความสัมพันธ์ในการสั่งซื้อ แต่ยังไม่ได้สุ่ม (ตัวอย่างเช่นพวกเขาอาจละเมิดกฎเพียงข้อเดียวและสำหรับองค์ประกอบเฉพาะในชุด)


8
ข้อมูลทุกชนิดเพิ่งต้มลงไปยังโหนดที่มีตัวชี้หรือไม่?
อาร์เรย์หรือเวกเตอร์เป็นเพียงลำดับของค่า พวกเขาสามารถดำเนินการได้อย่างแน่นอนด้วยรายการที่เชื่อมโยง นี่เป็นเพียงโหนดจำนวนมากที่มีตัวชี้ไปยังโหนดถัดไป สแต็คและคิวเป็นข้อมูลนามธรรมสองประเภทที่สอนกันทั่วไปในหลักสูตร Intro CS ที่ไหนสักแห่งในชั้นเรียนนักเรียนมักจะต้องใช้สแต็คและคิวโดยใช้รายการที่เชื่อมโยงเป็นโครงสร้างข้อมูลพื้นฐานซึ่งหมายความว่าเรากลับไปที่แนวคิด "การรวบรวมโหนด" เดียวกัน คิวลำดับความสำคัญสามารถสร้างขึ้นได้โดยใช้ Heap ฮีปสามารถถูกคิดเป็นต้นไม้ที่มีค่า min ที่รูท ต้นไม้ทุกประเภทรวมถึง BSTs, AVL, ฮีปสามารถถือเป็นชุดของโหนดที่เชื่อมต่อกันด้วยขอบ โหนดเหล่านี้เชื่อมโยงกันโดยที่หนึ่งโหนดชี้ไปที่อื่น ดูเหมือนว่าทุกแนวคิดของข้อมูลสามารถต้มลงไปยังโหนดที่มีพอยน์เตอร์ไปยังโหนดอื่นที่เหมาะสมเท่านั้น นั่นถูกต้องใช่ไหม? ถ้ามันง่ายขนาดนี้ทำไมตำราเรียนไม่อธิบายว่าข้อมูลเป็นเพียงแค่จุดเชื่อมต่อที่มีตัวชี้? เราจะไปจากโหนดไปยังรหัสไบนารีได้อย่างไร

3
มีอัลกอริทึมที่สามารถพิสูจน์ได้แม้ว่าเราจะไม่รู้ว่ามันคืออะไร?
ในคณิตศาสตร์มีหลักฐานการดำรงอยู่มากมายที่ไม่สร้างสรรค์ดังนั้นเราจึงรู้ว่ามีวัตถุบางอย่างอยู่แม้ว่าเราจะไม่รู้วิธีการค้นหามัน ฉันกำลังมองหาผลลัพธ์ที่คล้ายกันในวิทยาการคอมพิวเตอร์ โดยเฉพาะอย่างยิ่ง: มีปัญหาที่เราสามารถพิสูจน์ได้หรือไม่โดยไม่ต้องแสดงอัลกอริทึมสำหรับมัน? คือเรารู้ว่ามันสามารถแก้ไขได้โดยอัลกอริทึม แต่เราไม่รู้ว่าอัลกอริทึมนั้นเป็นอย่างไร

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