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

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

1
ผลรวมถ่วงน้ำหนักของหมายเลข N ล่าสุด
สมมติว่าเราได้รับตัวเลขในสตรีม หลังจากได้รับแต่ละตัวเลขแล้วจะต้องคำนวณผลรวมถ่วงน้ำหนักของตัวเลขสุดท้ายโดยที่น้ำหนักจะเหมือนกันเสมอ แต่ตามอำเภอใจNNN ทำได้อย่างมีประสิทธิภาพแค่ไหนหากเราได้รับอนุญาตให้เก็บโครงสร้างข้อมูลไว้เพื่อช่วยในการคำนวณ? เราสามารถทำได้ดีกว่าคือการคำนวณผลรวมทุกครั้งที่ได้รับตัวเลขหรือไม่Θ(N)Θ(N)\Theta(N) ตัวอย่างเช่นสมมติว่าน้ำหนักที่มีw_4 เมื่อมาถึงจุดหนึ่งที่เรามีรายชื่อของที่ผ่านมาตัวเลขและน้ำหนักรวม dW=⟨w1,w2,w3,w4⟩W=⟨w1,w2,w3,w4⟩W= \langle w_1, w_2, w_3, w_4\rangleNNNL1=⟨a,b,c,d⟩>L1=⟨a,b,c,d⟩>L_1= \langle a, b, c, d \rangle>S1=w1∗a+w2∗b+w3∗c+w4∗dS1=w1∗a+w2∗b+w3∗c+w4∗dS_1=w_1*a+w_2*b+w_3*c+w_4*d เมื่อจำนวนอีกจะได้รับเราปรับปรุงรายการที่จะได้รับและเราจำเป็นต้องคำนวณ .eeeL2=⟨b,c,d,e⟩L2=⟨b,c,d,e⟩L_2= \langle b,c,d,e\rangleS2=w1∗b+w2∗c+w3∗d+w4∗eS2=w1∗b+w2∗c+w3∗d+w4∗eS_2=w_1*b+w_2*c+w_3*d+w_4*e การพิจารณาโดยใช้ FFT กรณีพิเศษของปัญหานี้ดูเหมือนจะแก้ไขได้อย่างมีประสิทธิภาพโดยใช้การแปลงฟูริเยร์อย่างรวดเร็ว ที่นี่เราคำนวณจำนวนเงินชั่งน้ำหนักหลายรายการNกล่าวอีกนัยหนึ่งเราได้รับหมายเลขNและจากนั้นเราสามารถคำนวณผลรวมNน้ำหนักที่เกี่ยวข้อง การทำเช่นนี้เราต้องN-1หมายเลขที่ผ่านมา (ซึ่งจำนวนเงินที่ได้รับการคำนวณแล้ว) และยังไม่มีตัวเลขใหม่ทั้งหมด2N-1หมายเลขSSSNNNNNNNNNN−1N−1N-1NNN2N−12N−12N-1 ถ้าเวกเตอร์ของตัวเลขอินพุตและเวกเตอร์น้ำหนักWWWกำหนดสัมประสิทธิ์ของพหุนามP(x)P(x)P(x)และQ(x)Q(x)Q(x)โดยมีค่าสัมประสิทธิ์ในQQQกลับด้านเราจะเห็นว่าผลิตภัณฑ์P(x)×Q(x)P(x)×Q(x)P(x)\times Q(x)เป็น พหุนามซึ่งมีค่าสัมประสิทธิ์อยู่ด้านหน้าxN−1xN−1x^{N-1}สูงสุดx2N−2x2N−2x^{2N-2}เป็นผลรวมของน้ำหนักที่เราแสวงหา สิ่งเหล่านี้สามารถคำนวณได้โดยใช้ FFT ในเวลาΘ(N∗log(N))Θ(N∗log⁡(N))\Theta(N*\log (N))ซึ่งทำให้เรามีเวลาเฉลี่ยΘ(log(N))Θ(log⁡(N))Θ(\log (N))ต่อจำนวนอินพุต อย่างไรก็ตามนี่ไม่ใช่วิธีแก้ปัญหาตามที่ระบุไว้เนื่องจากจำเป็นต้องมีการคำนวณผลรวมถ่วงน้ำหนักอย่างมีประสิทธิภาพทุกครั้งที่รับหมายเลขใหม่ - เราไม่สามารถหน่วงเวลาการคำนวณได้

1
การทำงานของอัลกอริทึมของ Ukkonen ขึ้นอยู่กับขนาดตัวอักษรอย่างไร
ฉันกังวลกับคำถามเกี่ยวกับเวลาที่ใช้ในการทำงานแบบไม่แสดงอาการของอัลกอริทึมของ Ukkonenซึ่งอาจเป็นอัลกอริทึมที่ได้รับความนิยมมากที่สุดสำหรับการสร้างต้นไม้ต่อท้ายในเวลาเชิงเส้น (?) นี่คือการอ้างอิงจากหนังสือ "อัลกอริทึมในสตริงต้นไม้และลำดับ" โดย Dan Gusfield (ส่วน 6.5.1): "... อัลกอริธึมAho-Corasick, Weiner, Ukkonenและ McCreight นั้นต้องการพื้นที่หรือเวลาต้องถูกแทนที่ด้วยค่าต่ำสุดของและ "Θ(m|Σ|)Θ(m|Σ|)\Theta(m|\Sigma|)O(m)O(m)O(m)O(mlogm)O(mlog⁡m)O(m \log m)O(mlog|Σ|)O(mlog⁡|Σ|)O(m \log|\Sigma|) [คือความยาวสตริงและคือขนาดของตัวอักษร]mmmΣΣ\Sigma ฉันไม่เข้าใจว่าทำไมถึงเป็นจริง พื้นที่:ดีในกรณีที่เราเป็นตัวแทนของสาขาออกจากโหนดใช้อาร์เรย์ขนาดแล้วแน่นอนเราจบลงด้วยการใช้พื้นที่ อย่างไรก็ตามเท่าที่ฉันเห็นมันเป็นไปได้ที่จะจัดเก็บกิ่งไม้โดยใช้ตารางแฮช (เช่นพจนานุกรมใน Python) จากนั้นเราจะมีเฉพาะตัวชี้เก็บไว้ในตารางแฮชทั้งหมด (เนื่องจากมีขอบในต้นไม้) ในขณะที่ยังคงสามารถเข้าถึงโหนดลูกในเวลาเร็วที่สุด เช่นเดียวกับเมื่อใช้อาร์เรย์Θ(|Σ|)Θ(|Σ|)\Theta(|\Sigma|)Θ(m|Σ|)Θ(m|Σ|)\Theta(m|\Sigma|)Θ(m)Θ(m)\Theta(m)Θ(m)Θ(m)\Theta(m)O(1)O(1)O(1) เวลา : ดังกล่าวข้างต้นโดยใช้ตารางแฮชช่วยให้เราสามารถเข้าถึงสาขาขาออกของโหนดใด ๆ ในเวลา ตั้งแต่ขั้นตอนวิธี Ukkonen ต้องใช้การดำเนินงาน (รวมถึงการเข้าถึงโหนดเด็ก) เวลาการทำงานโดยรวมแล้วจะเป็นยัง(เมตร)O(1)O(1)O(1)O(m)O(m)O(m)O(m)O(m)O(m) ฉันจะขอบคุณคุณเป็นอย่างมากสำหรับคำแนะนำใด ๆ ว่าทำไมฉันถึงเข้าใจผิดในข้อสรุปของฉันและทำไม Gusfield ถึงถูกต้องเกี่ยวกับการพึ่งพาอัลกอริทึมของ Ukkonen ในตัวอักษร

2
แนวคิดทั่วไปในการคูณ Karatsuba, Gauss และ Strassen
ตัวตนที่ใช้ในอัลกอริทึมการคูณโดย Karatsuba (จำนวนเต็ม) เกาส์ (จำนวนเชิงซ้อน) Strassen (เมทริกซ์) ดูเหมือนจะเกี่ยวข้องกันมาก มีกรอบ / บทสรุปทั่วไปที่เป็นนามธรรมหรือไม่?

1
กำลังสร้างอินพุตสำหรับอัลกอริทึมกราฟทดสอบแบบสุ่มหรือไม่
เมื่อทำการทดสอบอัลกอริทึมวิธีการทั่วไปคือการทดสอบแบบสุ่ม: สร้างอินพุตจำนวนมากตามการแจกแจงบางตัว (โดยทั่วไปจะเหมือนกัน) รันอัลกอริธึมเหล่านั้นและตรวจสอบความถูกต้อง กรอบการทดสอบที่ทันสมัยสามารถสร้างอินพุตได้โดยอัตโนมัติโดยมีลายเซ็นของอัลกอริทึมพร้อมข้อ จำกัด หากอินพุตเป็นตัวเลขรายการหรือสตริงการสร้างอินพุตดังกล่าวเป็นแนวตรง ต้นไม้นั้นยากขึ้น แต่ก็ยังง่าย (ใช้ไวยากรณ์ที่ไม่มีบริบทสุ่มหรือวิธีการที่คล้ายกัน) คุณจะสร้างกราฟสุ่ม (อย่างมีประสิทธิภาพ) ได้อย่างไร โดยทั่วไปแล้วการเลือกกราฟที่สุ่มอย่างสม่ำเสมอไม่ใช่สิ่งที่คุณต้องการ: พวกเขาควรจะเชื่อมต่อหรือระนาบหรือรอบที่ไม่มีอิสระหรือเติมเต็มคุณสมบัติอื่น ๆ การสุ่มตัวอย่างการปฏิเสธดูเหมือนจะไม่ดีนักเนื่องจากมีกราฟที่ไม่พึงประสงค์จำนวนมากที่อาจเกิดขึ้น การแจกแจงที่มีประโยชน์คืออะไร มีประโยชน์ที่นี่หมายความว่า กราฟมีแนวโน้มที่จะทดสอบอัลกอริทึมที่อยู่ในมือและ พวกเขาสามารถสร้างได้อย่างมีประสิทธิภาพและมีประสิทธิภาพ ฉันรู้ว่ามีหลายรุ่นสำหรับกราฟสุ่มดังนั้นฉันขอขอบคุณความเข้าใจที่ดีที่สุดสำหรับการสร้างกราฟในเรื่องนี้ หาก "อัลกอริทึมบางตัว" กว้างเกินไปโปรดใช้อัลกอริธึมการค้นหาเส้นทางที่สั้นที่สุดเป็นคลาสที่เป็นรูปธรรมของอัลกอริทึมภายใต้การทดสอบ กราฟสำหรับการทดสอบควรเชื่อมต่อและค่อนข้างหนาแน่น (ที่มีความน่าจะเป็นสูงหรืออย่างน้อยก็คาดไว้) สำหรับการทดสอบทางออกที่ดีที่สุดคือการสร้างกราฟสุ่มรอบเส้นทางที่สั้นที่สุดเพื่อให้เราทราบผลลัพธ์ที่ต้องการ (โดยไม่ต้องใช้อัลกอริทึมอื่น)

2
เส้นทางที่สั้นที่สุดบนกราฟที่ไม่ได้บอกทิศทาง
ดังนั้นฉันคิดว่าคำถามนี้ (แต่ค่อนข้างพื้นฐาน) อยู่ที่นี่: สมมติว่าฉันมีกราฟขนาด 100 โหนดในรูปแบบ 10x10 (คิดว่ากระดานหมากรุก) กราฟไม่ได้ถูกบอกทิศทางและไม่ได้ถ่วงน้ำหนัก การเคลื่อนที่ผ่านกราฟเกี่ยวข้องกับการเคลื่อนไปข้างหน้าสามช่องทางและข้างหนึ่งไปทางซ้ายหรือขวา (คล้ายกับว่าหมากรุกอัศวินเคลื่อนที่ผ่านกระดาน) เมื่อกำหนดโหนดเริ่มต้นที่แน่นอนแล้วเราจะหาเส้นทางที่สั้นที่สุดไปยังโหนดอื่น ๆ บนกระดานได้อย่างไร ฉันจินตนาการว่าจะมีเพียงขอบระหว่างโหนดที่เคลื่อนที่ได้ ดังนั้นจากข้อมูลนี้ฉันต้องการหาเส้นทางที่สั้นที่สุดจากโหนดเริ่มต้นไปยังโหนดสุดท้าย ความคิดเริ่มต้นของฉันคือขอบแต่ละข้างนั้นมีน้ำหนัก 1 น้ำหนักอย่างไรก็ตามกราฟไม่ได้ถูกบอกทิศทางดังนั้น Djikstras จึงไม่เหมาะอย่างยิ่ง ดังนั้นฉันตัดสินใจที่จะทำโดยใช้รูปแบบที่เปลี่ยนแปลงของการค้นหาความลึกครั้งแรก อย่างไรก็ตามฉันไม่สามารถทำให้ชีวิตของฉันนึกภาพได้ว่าจะหาเส้นทางที่สั้นที่สุดโดยใช้การค้นหาได้อย่างไร อีกสิ่งหนึ่งที่ฉันพยายามคือการใส่กราฟในรูปแบบต้นไม้โดยมีจุดเริ่มต้นเป็นรูทจากนั้นเลือกผลลัพธ์ที่ตื้นที่สุด (หมายเลขแถวต่ำสุด) ที่ให้โหนดปลายทางที่ต้องการแก่ฉัน ... สิ่งนี้ใช้ได้ แต่ก็ไม่มีประสิทธิภาพอย่างเหลือเชื่อ จะไม่ทำงานสำหรับกราฟขนาดใหญ่ ไม่มีใครมีความคิดใด ๆ ที่อาจชี้ให้ฉันไปในทิศทางที่ถูกต้องในเรื่องนี้? ขอบคุณมาก. (ฉันพยายามใส่ภาพกราฟ แต่ไม่สามารถทำได้เนื่องจากชื่อเสียงที่ต่ำของฉัน)

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

5
ชุดอิสระสูงสุดของกราฟแบบสองทาง
ฉันพยายามหากราฟอิสระชุดสูงสุดของ Biparite ฉันพบสิ่งต่อไปนี้ในบางบันทึกย่อ"13 พฤษภาคม 1998 - มหาวิทยาลัยวอชิงตัน - CSE 521 - การประยุกต์ใช้งานของเครือข่ายไหล" : ปัญหา: ได้รับการฝ่ายกราฟG = ( U, โวลต์, E)G=(U,V,E)G = (U,V,E)หาชุดอิสระยู'∪ V'U′∪V′U' \cup V'ซึ่งเป็นขนาดใหญ่ที่สุดเท่าที่เป็นไปได้ที่ยู'⊆ คุณU′⊆UU' \subseteq UและV'⊆ VV′⊆VV' \subseteq V V ชุดเป็นอิสระหากไม่มีขอบของEEEระหว่างองค์ประกอบของชุด วิธีการแก้: สร้างกราฟการไหลในจุดยู∪ V∪ { s , t }U∪V∪{s,t}U \cup V \cup \{s,t\} } สำหรับแต่ละขอบ(u,v)∈E(u,v)∈E(u,v) \in Eมีขอบจุอนันต์จากuuuจะ วีvvvสำหรับแต่ละu∈Uu∈Uu …

3
เส้นแบ่งคะแนนสองชุด
หากมีวิธีการระบุว่าจุดสองชุดสามารถคั่นด้วยเส้นได้หรือไม่? เรามีสองชุดของจุดAAAและBBBหากมีเส้นที่แยกAAAและBBBเช่นนั้นจุดทั้งหมดของAAAและเท่านั้นAAAที่ด้านหนึ่งของเส้นและจุดทั้งหมดของBBBและเพียงBBBด้านอื่น ๆ อัลกอริธึมที่ไร้เดียงสาที่สุดที่ฉันพบคือการสร้างรูปหลายเหลี่ยมนูนสำหรับAAAและBBBและทดสอบเพื่อหาจุดตัด ดูเวลาที่ความซับซ้อนของเวลาสำหรับสิ่งนี้ควรเป็นO(nlogh)O(nlog⁡h)O(n\log h)สำหรับการสร้างรูปหลายเหลี่ยมนูน จริงๆแล้วฉันไม่ได้คาดหวังการปรับปรุงใด ๆ ในเรื่องความซับซ้อนของเวลาฉันไม่แน่ใจว่ามันจะสามารถปรับปรุงได้เลย แต่อย่างน้อยก็ควรมีวิธีที่สวยงามกว่านี้ในการพิจารณาว่ามีเส้นดังกล่าวหรือไม่

3
วงกลมล้อมรอบสูงสุดของรัศมีที่กำหนด
ฉันพยายามหาวิธีแก้ไขปัญหาต่อไปนี้: ให้ชุดของจุดและรัศมีค้นหาจุดศูนย์กลางของวงกลมเช่นวงกลมที่มีจำนวนคะแนนสูงสุดจากชุด เวลาทำงานควรจะ2)SSSrrrO(n2)O(n2)O(n^2) ตอนแรกมันดูเหมือนจะเป็นสิ่งที่คล้ายกับปัญหาวงกลมล้อมรอบขนาดเล็กที่สุดที่สามารถแก้ไขได้ใน2) ความคิดคือการตั้งศูนย์โดยพลการและล้อมรอบทุกจุดของส ถัดไปทีละขั้นตอนแทนที่วงกลมเพื่อสัมผัสจุดซ้าย / ขวาสุดและลดขนาดวงกลมไปยังรัศมีที่กำหนดชัดเจนว่านี่จะไม่ทำงานO(n2)O(n2)O(n^2)SSS

1
การตัดแต่งกิ่งเบต้าอัลฟา
ฉันกำลังมองหาอัลกอริทึมที่มีประสิทธิภาพซึ่งช่วยให้ฉันสามารถประมวลผลแผนผังการค้นหาขนาดเล็กของหมากรุกด้วยการตัดแบบอัลฟาเบต้าบนสถาปัตยกรรมแบบกระจาย อัลกอริทึมที่ฉันพบ (PVS, YBWC, DTS ดูด้านล่าง) ทั้งหมดค่อนข้างเก่า (1990 เป็นรุ่นล่าสุด) ฉันคิดว่ามีความก้าวหน้าที่สำคัญมากมายตั้งแต่นั้นมา มาตรฐานปัจจุบันในสาขานี้คืออะไร? นอกจากนี้โปรดชี้แนะฉันให้อธิบายคำอธิบายของ DTS ที่งี่เง่าเพราะฉันไม่สามารถเข้าใจได้จากงานวิจัยที่ฉันได้อ่าน อัลกอริทึมดังกล่าวข้างต้น: PVS: การแยกการแปรผันของหลักการ YBWC: Young Brothers Wait Concept DTS: การแยกต้นไม้แบบไดนามิก ทุกคนจะกล่าวถึงที่นี่

2
อัลกอริทึมการตรวจสอบประเภท
ฉันเริ่มต้นการวิจัยบรรณานุกรมส่วนบุคคลเกี่ยวกับอัลกอริทึมการตรวจสอบประเภทและต้องการคำแนะนำ อัลกอริทึมการตรวจสอบประเภทกลยุทธ์และเทคนิคทั่วไปที่ใช้มากที่สุดคืออะไร? ฉันสนใจอัลกอริทึมการตรวจสอบประเภทที่ซับซ้อนโดยเฉพาะอย่างยิ่งในภาษาที่พิมพ์แบบคงที่ที่รู้จักกันอย่างกว้างขวางเช่น C ++, Java 5+, Scala หรืออื่น ๆ IE, อัลกอริทึมการตรวจสอบประเภทที่ไม่ง่ายมากเนื่องจากการพิมพ์ภาษาพื้นฐานง่าย ๆ (เช่น Java 1.4 และต่ำกว่า) ฉันไม่สนใจภาษาที่เฉพาะเจาะจง X, Y หรือ Z ฉันสนใจในการตรวจสอบอัลกอริทึมโดยไม่คำนึงถึงภาษาที่พวกเขากำหนดเป้าหมาย หากคุณให้คำตอบเช่น "ภาษา L ที่คุณไม่เคยได้ยินเกี่ยวกับสิ่งที่พิมพ์อย่างยิ่งและการพิมพ์มีความซับซ้อนมีอัลกอริทึมการตรวจสอบประเภทที่ A, B และ C โดยการตรวจสอบ X และ Y โดยใช้อัลกอริทึม Z" หรือ " กลยุทธ์ X และ Y ที่ใช้สำหรับ Scala และตัวแปร Z ของ A ที่ใช้สำหรับ …

5
ความแตกต่างในการเขียนโปรแกรมแบบไดนามิก: ตัวอย่างที่จำเป็น!
ฉันทำงานเกี่ยวกับการเขียนโปรแกรมแบบไดนามิกมาระยะหนึ่งแล้ว วิธีบัญญัติของการประเมินการเรียกใช้การเขียนโปรแกรมแบบไดนามิกคือการสร้างตารางของค่าที่จำเป็นทั้งหมดและกรอกข้อมูลทีละแถว ดูตัวอย่างจากCormen, Leiserson และ al: "Introduction to Algorithms"สำหรับการแนะนำ ฉันมุ่งเน้นที่รูปแบบการคำนวณบนโต๊ะในสองมิติ (การกรอกข้อมูลแบบแถวต่อแถว) และตรวจสอบโครงสร้างของการพึ่งพาเซลล์นั่นคือเซลล์ใดที่ต้องทำก่อนที่จะคำนวณอื่นได้ เราแสดงด้วยชุดของดัชนีของเซลล์ที่เซลล์ของฉันขึ้นอยู่กับ โปรดทราบว่าΓจะต้องไม่มีรอบΓ(i)Γ(i)\Gamma(\mathbf{i})ii\mathbf{i}ΓΓ\Gamma ฉันสรุปจากฟังก์ชันจริงที่คำนวณและมีสมาธิกับโครงสร้างแบบเรียกซ้ำ อย่างเป็นทางการผมพิจารณา recurrrence ที่จะเขียนโปรแกรมแบบไดนามิกถ้ามันมีรูปแบบddd d(i)=f(i,Γ˜d(i))d(i)=f(i,Γ~d(i))\qquad d(\mathbf{i}) = f(\mathbf{i}, \widetilde{\Gamma}_d(\mathbf{i})) กับ , ~ Γ d ( ฉัน ) = { ( J , d ( ญ ) ) | เจ ∈ Γ d ( ฉัน ) }และฉบางคน …

6
การเขียนโปรแกรมแบบไดนามิกแตกต่างจากแรงเดรัจฉานอย่างไร
ฉันอ่านเกี่ยวกับการเขียนโปรแกรมแบบไดนามิกเมื่อฉันเจอข้อความอ้างอิงต่อไปนี้ อัลกอริทึมการเขียนโปรแกรมแบบไดนามิกจะตรวจสอบวิธีที่เป็นไปได้ทั้งหมดในการแก้ปัญหาและจะเลือกทางออกที่ดีที่สุด ดังนั้นเราจึงสามารถคิดคร่าว ๆ ของการเขียนโปรแกรมแบบไดนามิกเป็นอัจฉริยะวิธีแรงเดรัจฉานที่ช่วยให้เราไปถึงการแก้ปัญหาที่เป็นไปได้ทั้งหมดในการเลือกที่ดีที่สุด หากขอบเขตของปัญหาเป็นเช่นนั้นที่จะผ่านการแก้ไขปัญหาที่เป็นไปได้ทั้งหมดและเป็นไปได้อย่างรวดเร็วพอการเขียนโปรแกรมแบบไดนามิกรับประกันการหาทางออกที่ดีที่สุด ตัวอย่างต่อไปนี้ได้รับ ตัวอย่างเช่นสมมติว่าคุณต้องได้รับจากจุด A ถึงจุด B โดยเร็วที่สุดในเมืองที่กำหนดในช่วงชั่วโมงเร่งด่วน อัลกอริทึมการเขียนโปรแกรมแบบไดนามิกจะตรวจสอบรายงานการจราจรทั้งหมดโดยดูจากชุดค่าผสมที่เป็นไปได้ทั้งหมดของถนนที่คุณอาจจะใช้แล้วจะบอกให้คุณทราบว่าวิธีใดเป็นวิธีที่เร็วที่สุด แน่นอนว่าคุณอาจต้องรอสักครู่จนกว่าอัลกอริทึมจะเสร็จสิ้นและจากนั้นจึงเริ่มขับรถเท่านั้น เส้นทางที่คุณจะใช้จะเป็นเส้นทางที่เร็วที่สุด (สมมติว่าไม่มีอะไรเปลี่ยนแปลงในสภาพแวดล้อมภายนอก) Brute Force กำลังพยายามแก้ปัญหาที่เป็นไปได้ก่อนตัดสินใจเลือกทางออกที่ดีที่สุด การเขียนโปรแกรมแบบไดนามิกแตกต่างจาก Brute Force อย่างไรหากผ่านโซลูชั่นที่เป็นไปได้ทั้งหมดก่อนที่จะเลือกสิ่งที่ดีที่สุดความแตกต่างเดียวที่ฉันเห็นคือการเขียนโปรแกรมแบบไดนามิกคำนึงถึงปัจจัยเพิ่มเติม (สภาพการจราจรในกรณีนี้) ฉันถูกต้องหรือไม่ที่จะบอกว่า Dynamic Programming เป็นส่วนหนึ่งของวิธี Brute Force?

1
การคำนวณอย่างมีประสิทธิภาพหรือใกล้เคียงกับมิติ VC ของเครือข่ายประสาทเทียม
เป้าหมายของฉันคือการแก้ปัญหาต่อไปนี้ซึ่งฉันได้อธิบายไว้โดยอินพุตและเอาต์พุต: การป้อนข้อมูล: กราฟรอบทิศทางกับโหนดm , แหล่งที่มาnและ1อ่างล้างจาน ( m > n ≥ 1 )GGGม.ม.mnnn111m > n ≥ 1ม.>n≥1m > n \geq 1 เอาท์พุท: VC-มิติ (หรือประมาณของมัน) สำหรับเครือข่ายประสาทกับโครงสร้างGGGG เฉพาะเจาะจงมากขึ้น : แต่ละโหนดในเป็นเซลล์ประสาท sigmoid โทโพโลยีได้รับการแก้ไขแล้ว แต่น้ำหนักบนขอบสามารถเปลี่ยนแปลงได้โดยอัลกอริทึมการเรียนรู้GGG อัลกอริทึมการเรียนรู้ได้รับการแก้ไข (พูดการถ่ายทอดย้อนกลับ) โหนดต้นทางเซลล์ป้อนข้อมูลและสามารถใช้สตริงจาก{ - 1 , 1 } nเป็น inputnnn{ - 1 , 1 }n{-1,1}n\{-1,1\}^n โหนด sink เป็นหน่วยเอาต์พุต มันออกค่าจริงจากที่เรารอบขึ้นไป1หรือลงเพื่อ- 1ถ้ามันเป็นมากกว่าเกณฑ์บางอย่างคงที่δห่างจาก0[ …

4
วัตถุประสงค์ของโหนดสีเทาในการค้นหากราฟครั้งแรก
ในการนำไปใช้งานหลายครั้งของการค้นหาความลึกครั้งแรกที่ฉันเห็น (ตัวอย่าง: ที่นี่ ) รหัสแยกความแตกต่างระหว่างจุดสุดยอดสีเทา (ค้นพบ แต่ไม่ใช่การเยี่ยมเพื่อนบ้านทั้งหมด) และจุดสุดยอดสีดำ (ค้นพบและเพื่อนบ้านทั้งหมด) . จุดประสงค์ของความแตกต่างนี้คืออะไร? ดูเหมือนว่าอัลกอริทึม DFS จะไม่เข้าเยี่ยมชมจุดสุดยอดไม่ว่าจะเป็นสีเทาหรือสีดำ

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