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

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

6
ในเวลา O (n): ค้นหาองค์ประกอบที่ยิ่งใหญ่ที่สุดในชุดซึ่งการเปรียบเทียบไม่ได้ผ่านการถ่ายทอด
หัวข้อระบุคำถาม เรามีรายการองค์ประกอบที่เราสามารถเปรียบเทียบได้ (พิจารณาว่าอะไรคือสิ่งที่ยิ่งใหญ่ที่สุด ) องค์ประกอบไม่สามารถเท่ากับ ประเด็นสำคัญ: การเปรียบเทียบไม่ใช่การถ่ายทอด (คิดว่ากรรไกรกระดาษหิน): สิ่งนี้เป็นจริง: A> B, B> C, C> A (โปรดทราบว่านี่ไม่ใช่การป้อนข้อมูลที่ถูกต้องเนื่องจากไม่มีคำตอบที่ถูกต้องที่นี่ฉันแค่อธิบายว่า " การเปรียบเทียบที่ไม่เกี่ยวกับสกรรมกริยา "หมายถึง) แต่ละอาร์เรย์อินพุตจะรับประกันว่าจะมีคำตอบ ยิ่งใหญ่ที่สุดหมายถึงองค์ประกอบจะต้องมากกว่าองค์ประกอบอื่น ๆ คุณสมบัติการสนทนาถือเช่น A> B หมายความว่า B <A ตัวอย่าง: Input: [A,B,C,D] A > B, B > C, C > A D > A, D > B, D > C Output: …

2
อัลกอริธึมที่เร็วที่สุดสำหรับการคูณตัวเลขสองหลักคืออะไร
ฉันต้องการทราบว่าอัลกอริทึมใดที่เร็วที่สุดสำหรับการคูณตัวเลขสองหลัก n? ความซับซ้อนของพื้นที่สามารถผ่อนคลายได้ที่นี่!

4
จองอัลกอริทึมนอกเหนือจาก Cormen
ฉันได้ทำเนื้อหาส่วนใหญ่ในหนังสือ Intro to Algorithms ของ Cormen แล้วและฉันกำลังมองหาหนังสืออัลกอริทึมที่ครอบคลุมเนื้อหามากกว่าหนังสือของ Corman มีคำแนะนำอะไรบ้าง? หมายเหตุ: ฉันถามสิ่งนี้ใน stackoverflow แต่ไม่พอใจกับคำตอบทั้งหมด หมายเหตุ: การดูความคิดเห็นส่วนใหญ่ฉันคิดว่าฉันควรจะหาหนังสือที่ครอบคลุมเนื้อหาของหลักสูตร 787 ในคำอธิบายหลักสูตรนี้

3
มีอัลกอริทึมที่ค้นหาการเรียงลำดับขนาดที่สามในเวลาหรือไม่?
คำถามนี้ถูกย้ายจาก Theoretical Computer Science Exchange Exchange เนื่องจากสามารถตอบได้ใน Computer Science Stack Exchange อพยพ 7 ปีที่ผ่านมา ฉันต้องการที่จะพิสูจน์หรือหักล้างการดำรงอยู่ของอัลกอริทึมที่ได้รับอาร์เรย์ของจำนวนเต็มพบสามดัชนีและดังกล่าวว่าและ (หรือพบว่าไม่มีสามเท่า) ในเวลาเชิงเส้นi , j k i &lt; j &lt; k A [ i ] &lt; A [ j ] &lt; A [ k ]AAAฉัน, Ji,ji, jkkkฉัน&lt; j &lt; ki&lt;j&lt;ki < j < kA[i]&lt;A[j]&lt;A[k]A[i]&lt;A[j]&lt;A[k]A[i] < A[j] …

1
บีบอัดชื่อโดเมน
ผมอยากรู้ว่าวิธีหนึ่งอาจมากดานบีบอัดโดเมนของพลIDNชื่อโฮสต์ (ตามที่กำหนดโดยRFC5890 ) และสงสัยว่านี้อาจจะกลายเป็นความท้าทายที่น่าสนใจ โฮสต์ Unicode หรือชื่อโดเมน (U-label) ประกอบด้วยสตริงของอักขระ Unicode โดยทั่วไปจะถูก จำกัด ให้เป็นหนึ่งภาษาขึ้นอยู่กับโดเมนระดับบนสุด (เช่นตัวอักษรกรีกภายใต้.gr) ซึ่งเข้ารหัสเป็นสตริง ASCII ที่ขึ้นต้นด้วยxn--(ที่สอดคล้องกัน A-ฉลาก) หนึ่งสามารถสร้างแบบจำลองข้อมูลไม่เพียง แต่จากข้อกำหนดอย่างเป็นทางการที่ แต่ละป้ายที่ไม่ใช่ Unicode จะจับคู่สตริง^[a-z\d]([a-z\d\-]{0,61}[a-z\d])?$; แต่ละ A-label เป็นการจับคู่สตริง^xn--[a-z\d]([a-z\d\-]{0,57}[a-z\d])?$; และ ความยาวรวมของโดเมนทั้งหมด (ป้ายกำกับ A และป้ายกำกับที่ไม่ใช่ IDN ตัดแบ่งด้วย '.' ตัวคั่น) ไม่เกิน 255 อักขระ แต่จากการวิเคราะห์พฤติกรรมต่าง ๆ รวมไปถึง: ลดการสั่งซื้อ U-ฉลากมักจะ lexically, ไวยากรณ์และความหมายวลีที่ถูกต้องในภาษาธรรมชาติบางอย่างรวมทั้งคำนามที่เหมาะสมและตัวเลข (unpunctuated ยกเว้นยัติภังค์ปลดออกจากช่องว่างและพับต่อNameprep ) มีการตั้งค่าสำหรับวลีสั้น; และ …

3
การใช้งานจริงของ Radix Sort
Radix จัดเรียงเป็นทฤษฎีอย่างรวดเร็วเมื่อคุณรู้ว่ากุญแจอยู่ในขอบเขต จำกัด บางอย่างบอกว่าค่าในช่วงตัวอย่างเช่น หากคุณเพิ่งแปลงค่าเป็นฐานซึ่งใช้เวลาเวลาให้ทำการจัดเรียงฐาน radix จากนั้นแปลงกลับเป็นฐานเดิมของคุณเพื่ออัลกอริทึมโดยรวมnnn[ 0 … nk- 1 ][0...nk-1][0\dots n^k -1]k &lt; lgnk&lt;LG⁡nk<\lg nnnnΘ ( n )Θ(n)\Theta(n)nnnΘ ( n k )Θ(nk)\Theta(nk) อย่างไรก็ตามฉันได้อ่านแล้วว่าโดยทั่วไปแล้วการเรียงลำดับของ Radix ในทางปฏิบัติจะช้ากว่าการทำ Quicksort แบบสุ่มมาก : สำหรับอาร์เรย์ขนาดใหญ่การเรียงลำดับแบบ Radix มีจำนวนการเรียนการสอนต่ำที่สุด แต่เนื่องจากประสิทธิภาพแคชค่อนข้างต่ำประสิทธิภาพโดยรวมจึงแย่กว่ารุ่นที่ผสานหน่วยความจำและการรวมแบบรวดเร็ว การจัดเรียงของ Radix เป็นเพียงแค่อัลกอริธึมทางทฤษฎีที่ดีหรือว่ามันมีประโยชน์ในทางปฏิบัติทั่วไปหรือไม่?

3
วิธีการกำหนดปัญหาการคำนวณอย่างจริงจัง?
ฉันมักจะโต้ตอบกับผู้ที่ต้องการขออัลกอริทึมสำหรับปัญหาการคำนวณ (หรือความซับซ้อนของมัน) แต่พวกเขาไม่ได้แสดงมันอย่างเข้มงวดเพื่อให้เรา (นักวิทยาศาสตร์คอมพิวเตอร์) เข้าใจ การอ้างถึงหนังสือเช่น CLRS นั้นไม่เป็นประโยชน์เพราะตัวอย่างมักจะมีวิธีการที่ค่อนข้างตรงไปตรงมาในการระบุอย่างจริงจังเช่นให้รายชื่อของกราฟและสองจุดยอดในการคำนวณเส้นทางที่สั้นที่สุดระหว่างจุดเหล่านั้น มีหนังสือดี ๆ (หรือแหล่งข้อมูลอื่น ๆ ) ที่บุคคลที่มีความรู้น้อยที่สุดของ CS สามารถเรียนรู้ได้อย่างไรว่าเราควรกำหนดและระบุปัญหาการคำนวณด้วยวิธีที่เข้มงวดซึ่งเป็นที่เข้าใจของนักวิทยาศาสตร์คอมพิวเตอร์หรือไม่ โดยเฉพาะอย่างยิ่งหนังสือควรมีตัวอย่างมากมายของวิธีการกำหนดปัญหาการคำนวณอย่างจริงจังจากตัวอย่างของโดเมนและโลกแห่งความจริงที่หลากหลาย การอธิบาย หากต้องการทำให้คำถามมีความเฉพาะเจาะจงมากขึ้นสมมติว่าพวกเขารู้คำศัพท์ทางคณิตศาสตร์ / CS พื้นฐานเช่นชุดฟังก์ชั่นกราฟรายการ ฯลฯ ในระดับชั้นปีที่ 1/2 นักศึกษาปริญญาตรี CS (ซึ่งเป็นกรณีของคนที่ฉันมี ใจ) ตัวอย่างเช่นพวกเขาได้อ่านตำราเรียนเบื้องต้นเช่น Aho และ Ullman (แม้ว่าพวกเขาอาจจะยังไม่เข้าใจทั้งหมดก็ตาม) อัล Aho และเจฟฟ์ Ullman มูลนิธิวิทยาศาสตร์คอมพิวเตอร์ 2535

2
เริ่มวงจรเชิงลบโดยใช้ Bellman Ford
ฉันต้องหาวัฏจักรเชิงลบในกราฟถ่วงน้ำหนักกำกับ ฉันรู้ว่าอัลกอรึทึมของ Bellman Ford ทำงานอย่างไรและมันบอกฉันว่ามีรอบลบหรือไม่ แต่มันไม่ได้ตั้งชื่ออย่างชัดเจน ฉันจะได้รับเส้นทางจริงของวัฏจักรอย่างไรv 1 , v 2 , … v k , v 1v1,v2,…vk,v1v1, v2, \ldots vk, v1 หลังจากใช้อัลกอริทึมมาตรฐานเราได้ทำการวนซ้ำแล้วและไม่ควรทำการปรับปรุงเพิ่มเติม หากเรายังคงสามารถลดระยะห่างไปยังโหนดได้จะมีวัฏจักรเชิงลบเกิดขึ้นn - 1n-1n-1 ความคิดของฉันคือ: เนื่องจากเรารู้ว่าขอบที่ยังสามารถปรับปรุงเส้นทางและเรารู้ว่าบรรพบุรุษของแต่ละโหนดเราสามารถติดตามวิธีการของเรากลับจากขอบนั้นจนกว่าเราจะได้พบกันอีกครั้ง ตอนนี้เราควรมีวัฏจักรของเรา น่าเศร้าที่ฉันไม่พบบทความใด ๆ ที่บอกฉันว่าสิ่งนี้ถูกต้องหรือไม่ ดังนั้นมันใช้งานได้จริงเช่นนั้น? แก้ไข:ตัวอย่างนี้พิสูจน์ว่าความคิดของฉันไม่ถูกต้อง ได้รับรูปแบบของกราฟต่อไปนี้เราทำงานยามฟอร์ดจากโหนด1111 เราจะดำเนินการขอบในลำดับD หลังจากทำซ้ำเราจะได้รับระยะทางโหนด:n - 1 1 : - 5 2 : - 30 3 : - …

1
กำลังตรวจจับความก้าวหน้าเลขคณิต 3SUM ยากหรือไม่?
นี้เป็นแรงบันดาลใจจากคำถามสัมภาษณ์ เราได้รับอาร์เรย์จำนวนเต็มและต้องพิจารณาว่ามีที่ชัดเจนหรือไม่ i &lt; j &lt; ka1,…,ana1,…,ana_1, \dots, a_nฉัน&lt; j &lt; ki&lt;j&lt;ki \lt j \lt k ak-J= aJ-ผมak−aj=aj−aia_k - a_j = a_j - a_i k - j = j - ik−j=j−ik - j = j - i เช่นลำดับและทั้งคู่อยู่ในการดำเนินการทางคณิตศาสตร์{ i , j , k }{ aผม,J,k}{ai,aj,ak}\{a_i, a_j, a_k\}{ i , j …

1
ปัญหาที่อัลกอริทึมที่ยึดตามการปรับแต่งพาร์ติชันทำงานเร็วกว่าในเวลาบันทึก
การปรับแต่งพาร์ติชันเป็นเทคนิคที่คุณเริ่มต้นด้วยชุด จำกัด ของวัตถุและแบ่งชุดอย่างต่อเนื่อง ปัญหาบางอย่างเช่นการย่อขนาด DFA สามารถแก้ไขได้โดยใช้การปรับแต่งพาร์ติชันอย่างมีประสิทธิภาพ ฉันไม่ทราบปัญหาอื่น ๆ ที่มักแก้ไขได้โดยใช้การปรับแต่งพาร์ติชันที่นอกเหนือจากที่ระบุไว้ในหน้า Wikipedia จากปัญหาเหล่านี้ทั้งหมดหน้า Wikipedia กล่าวถึงสองขั้นตอนวิธีซึ่งใช้การปรับแต่งพาร์ติชันในเวลาเชิงเส้น มีการจัดเรียงทอพอโลยีแบบเรียงลำดับตามคำศัพท์ [1] และอัลกอริธึมสำหรับการค้นหาพจนานุกรมแบบกว้างคำแรก [2] มีตัวอย่างอื่น ๆ หรือการอ้างอิงถึงปัญหาที่สามารถแก้ไขได้โดยใช้การปรับแต่งพาร์ทิชันอย่างมีประสิทธิภาพมากหมายถึงสิ่งที่ดีกว่า loglinear ในแง่ของเวลา? [1] Sethi, Ravi, "กราฟการกำหนดเวลาในโปรเซสเซอร์สองตัว", SIAM Journal on Computing 5 (1): 73–82, 1976 [2] Rose, DJ, Tarjan, RE, Lueker, GS, "อัลกอริทึมของการกำจัดจุดยอดบนกราฟ", SIAM Journal on Computing 5 (2): 266–283, 1976

3
การหาลอการิทึมไม่ต่อเนื่องนั้นยากเพียงใด
สิ้นเชิงลอการิทึมเป็นเช่นเดียวกับการหาbbbในข = คmodให้, CและNab=cmodNab=cmodNa^b=c \bmod NaaacccNNN ฉันสงสัยว่ากลุ่มความซับซ้อนใด (เช่นสำหรับคอมพิวเตอร์แบบคลาสสิคและแบบควอนตัม) ที่อยู่ในนี้และวิธีการใด (เช่นอัลกอริธึม) ที่ดีที่สุดสำหรับการทำงานนี้ให้สำเร็จ ลิงค์วิกิพีเดียด้านบนไม่ได้ให้เวลาที่แน่นอนมาก ฉันหวังว่าจะมีวิธีการที่ดีที่สุดที่เป็นที่รู้จักกันดีในการค้นหาสิ่งนั้น

4
จะใช้อัลกอริทึมแบบโลภเพื่อค้นหาลำดับที่ไม่ลดลงใกล้เคียงกับลำดับที่ได้อย่างไร
a1,…,ana1,…,ana_1, \ldots, a_n000lllaiaia_ibibib_i000lllbibib_iสูงสุด( | a1- ข1| ,…, | n- ขn| )max(|a1−b1|,…,|an−bn|)\max(|a_1-b_1|, \ldots, |a_n-b_n|)ขผมbib_iO ( n l√4)O(nl4)O(n\sqrt[4]{l}) ฉันไม่มีเงื่อนงำอย่างจริงใจว่าจะเริ่มแก้ไขคำถามนี้อย่างไร ดูเหมือนว่าฉันจะถามคำถามเกี่ยวกับการเขียนโปรแกรมแบบไดนามิก แต่อาจารย์บอกว่าควรแก้ไขได้โดยใช้อัลกอริทึมโลภ มันคงจะดีมากถ้ามีคนชี้ให้ฉันไปในทิศทางที่ถูกต้องด้วยการบอกใบ้เล็ก ๆ

3
ปัญหาใน P ด้วยอัลกอริทึมแบบสุ่มที่พิสูจน์ได้เร็วขึ้น
มีปัญหาใด ๆ ในPP\mathsf{P}ที่มีอัลกอริทึมแบบสุ่มที่เต้นต่ำกว่าขอบเขตของอัลกอริทึมที่กำหนดหรือไม่? ยิ่งขึ้นอย่างเป็นรูปธรรมเรารู้จักใดที่ ? ที่นี่\ mathsf {PTIME} (f (n))หมายถึงชุดภาษาที่ decidable โดย TM แบบสุ่มที่มีข้อผิดพลาดแบบ จำกัด ขอบเขต (หนึ่งหรือสองด้าน) ในขั้นตอนf (n)kkkDTIME(nk)⊊PTIME(nk)DTIME(nk)⊊PTIME(nk)\mathsf{DTIME}(n^k) \subsetneq \mathsf{PTIME}(n^k)PTIME(f(n))PTIME(f(n))\mathsf{PTIME}(f(n))f(n)f(n)f(n) การสุ่มซื้อของเราไว้ในPP\mathsf{P}หรือไม่? เพื่อความชัดเจนฉันกำลังมองหาบางสิ่งที่แตกต่างคือแบบอะซิมโทติค (พหุนามโดยเฉพาะอย่างยิ่ง แต่ฉันจะเลือกโพลีโลมาติกแบบไมโคร) ไม่ใช่แค่ค่าคงที่ ฉันกำลังมองหาอัลกอริทึมแบบไม่มีอาการในกรณีที่แย่ที่สุด อัลกอริทึมที่มีความซับซ้อนที่คาดหวังดีกว่าไม่ใช่สิ่งที่ฉันกำลังมองหา ฉันหมายถึงอัลกอริทึมแบบสุ่มเช่นเดียวกับใน RP หรือ BPP ไม่ใช่ ZPP

2
วิธีการคิดขั้นตอนวิธีการจัดเรียงหน้าต่าง (ปรับขนาดได้) บนหน้าจอเพื่อให้ครอบคลุมพื้นที่มากที่สุด
ฉันต้องการเขียนโปรแกรมง่าย ๆ ที่ยอมรับชุดของ windows (ความกว้าง + ความสูง) และความละเอียดหน้าจอและแสดงผลการจัดเรียงของหน้าต่างเหล่านั้นบนหน้าจอเพื่อให้ windows ใช้พื้นที่มากที่สุด ดังนั้นจึงเป็นไปได้ที่จะปรับขนาดหน้าต่างในขณะที่รักษา output size &gt;= initial sizeและอัตราส่วนกว้างยาว ดังนั้นสำหรับหน้าต่างฉันต้องการขั้นตอนวิธีการที่จะกลับขอบเขตของความกว้างความสูง)( x , y , w ฉันd t h , h e ฉันg h t )ผมii( x , y, W ฉันdt h , h e i gh t )(x,y,width,height)(x, y, width, height) ฉันเชื่อว่านี่อาจเป็นรูปแบบของเครื่องเป้ 2D …

2
จะอธิบายอัลกอริทึมพิสูจน์และวิเคราะห์ได้อย่างไร
ก่อนอ่านศิลปะการเขียนโปรแกรมคอมพิวเตอร์ (TAOCP)ฉันไม่ได้พิจารณาคำถามเหล่านี้อย่างลึกซึ้ง ฉันจะใช้รหัสเทียมเพื่ออธิบายอัลกอริทึมเข้าใจพวกเขาและประเมินเวลาทำงานเฉพาะเกี่ยวกับคำสั่งของการเติบโต TAOCPอย่างทั่วถึงการเปลี่ยนแปลงความคิดของฉัน TAOCPใช้ภาษาอังกฤษผสมกับขั้นตอนและข้ามไปเพื่ออธิบายอัลกอริทึมและใช้แผนภูมิการไหลเพื่อให้เห็นอัลกอริธึมได้ง่ายขึ้น ดูเหมือนว่าจะอยู่ในระดับต่ำ แต่ฉันพบว่ามีข้อได้เปรียบบางอย่างโดยเฉพาะอย่างยิ่งกับแผนภูมิการไหลซึ่งฉันไม่สนใจมาก เราสามารถติดฉลากลูกศรแต่ละอันด้วยการยืนยันเกี่ยวกับสถานะปัจจุบันของกิจการในเวลาที่การคำนวณสำรวจลูกศรนั้นและทำการพิสูจน์อุปนัยสำหรับอัลกอริทึม ผู้เขียนพูดว่า: มันเป็นความขัดแย้งของผู้เขียนที่เราเข้าใจจริง ๆ ว่าทำไมอัลกอริธึมจึงถูกต้องเฉพาะเมื่อเราไปถึงจุดที่ความคิดของเราเติมเต็มโดยนัยในการยืนยันทั้งหมดตามที่ทำในรูปที่ 4 ฉันไม่เคยเจอเรื่องแบบนี้เลย ข้อดีอีกอย่างคือเราสามารถนับจำนวนครั้งที่ดำเนินการแต่ละขั้นตอน ง่ายต่อการตรวจสอบกับกฎข้อแรกของ Kirchhoff ฉันไม่ได้วิเคราะห์เวลาทำงานอย่างแน่นอนดังนั้นบางส่วนอาจถูกตัดออกเมื่อฉันประเมินเวลาทำงาน± 1±1\pm1 การวิเคราะห์คำสั่งของการเติบโตบางครั้งก็ไร้ประโยชน์ ตัวอย่างเช่นเราไม่สามารถแยกแยะ quicksort จาก heapsort ได้เนื่องจากทั้งหมดคือโดยที่คือจำนวนสุ่มตัวแปรคาดหวังดังนั้นเราควรวิเคราะห์ค่าคงที่พูดและE (T_2 (n)) = A_2 \ lg n + B_2n + O (\ log n)ดังนั้นเราสามารถเปรียบเทียบT_1และT_2ดีกว่า และบางครั้งเราควรเปรียบเทียบปริมาณอื่น ๆ เช่นความแปรปรวน การวิเคราะห์คำสั่งซื้อของการเจริญเติบโตของเวลาทำงานเท่านั้นไม่เพียงพอ ในฐานะที่เป็นTAOCPE X X E ( T 1 …

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