คำถามติดแท็ก data-structures

คำถามเกี่ยวกับวิธีการจัดเก็บข้อมูลเพื่อให้สามารถใช้ประโยชน์จากอัลกอริทึม

5
อะไรคือเหตุผลในการเรียนรู้อัลกอริทึม / โครงสร้างข้อมูลที่แตกต่างกันซึ่งให้บริการเพื่อจุดประสงค์เดียวกัน
ฉันสงสัยเกี่ยวกับคำถามนี้ตั้งแต่ฉันเป็นนักเรียนระดับปริญญาตรี มันเป็นคำถามทั่วไป แต่ฉันจะทำอย่างละเอียดพร้อมตัวอย่างด้านล่าง ฉันได้เห็นอัลกอริทึมมากมาย - ตัวอย่างเช่นสำหรับปัญหาการไหลสูงสุดฉันรู้อัลกอริทึม 3 อย่างที่สามารถแก้ปัญหาได้: ฟอร์ด - ฟัลเกอร์สัน, เอ็ดมันด์ - คาร์ปและดินิกโดย Dinic มีความซับซ้อนที่สุด สำหรับโครงสร้างข้อมูล - ตัวอย่างเช่น heap - มี binary heaps, binomial heaps & Fibonacci heaps โดยที่ Fibonacci heap มีความซับซ้อนโดยรวมที่ดีที่สุด สิ่งที่ทำให้ฉันสับสนคือ: มีเหตุผลใดบ้างที่เราจำเป็นต้องรู้จักพวกเขาทั้งหมด? ทำไมไม่เพียงแค่เรียนรู้และทำความคุ้นเคยกับความซับซ้อนที่ดีที่สุด? ฉันรู้ว่ามันดีที่สุดถ้าเรารู้จักพวกเขาทั้งหมดฉันแค่อยากรู้ว่ามีเหตุผล "ที่ถูกต้องมากกว่า" เช่นปัญหา / อัลกอริทึมบางอย่างสามารถแก้ไขได้โดยใช้Aแต่ไม่ใช่Bเป็นต้น

5
ความแตกต่างระหว่างแผนภูมิการค้นหาแบบไบนารี่และฮีปแบบไบนารีคืออะไร
ทั้งสองดูเหมือนกันมากและมีโครงสร้างเกือบเหมือนกัน ความแตกต่างคืออะไร? ความซับซ้อนของเวลาสำหรับการดำเนินงานที่แตกต่างกันของแต่ละคนคืออะไร

4
(เมื่อใด) คือการค้นหาตารางแฮช O (1)?
มักจะกล่าวว่าการค้นหาตารางแฮชทำงานในเวลาคงที่: คุณคำนวณค่าแฮชซึ่งให้ดัชนีสำหรับการค้นหาอาร์เรย์ แต่สิ่งนี้ไม่สนใจการชน ในกรณีที่เลวร้ายที่สุดทุกรายการเกิดขึ้นในถังเดียวกันและเวลาค้นหากลายเป็นเชิงเส้น ( )Θ(n)Θ(n)\Theta(n) มีเงื่อนไขเกี่ยวกับข้อมูลที่สามารถทำการค้นหาตารางแฮชอย่างแท้จริงหรือไม่ เป็นค่าเฉลี่ยเท่านั้นหรือตารางแฮชมีค้นหาตัวพิมพ์ที่เลวร้ายที่สุด?O ( 1 )O(1)O(1)O(1)O(1)O(1)O(1) หมายเหตุ: ฉันมาจากมุมมองของโปรแกรมเมอร์ที่นี่ เมื่อฉันเก็บข้อมูลในตารางแฮชมันมักจะเป็นสตริงหรือโครงสร้างข้อมูลคอมโพสิตบางส่วนและข้อมูลจะเปลี่ยนแปลงในช่วงอายุของตารางแฮช ดังนั้นในขณะที่ฉันชื่นชมคำตอบเกี่ยวกับแฮ็กที่สมบูรณ์แบบพวกเขาน่ารัก แต่เป็นข้อมูลเล็ก ๆ น้อย ๆ และไม่สามารถใช้งานได้จริงจากมุมมองของฉัน การติดตามผล PS: ข้อมูลประเภทใดที่มีการดำเนินการตารางแฮช O (1)

4
ทำไมจึงเป็นการดีที่สุดที่จะใช้หมายเลขเฉพาะเป็น mod ในฟังก์ชัน hashing
ถ้าฉันมีรายการของค่าคีย์จาก 1 ถึง 100 และฉันต้องการจัดระเบียบพวกเขาในอาร์เรย์ 11 ถังฉันได้รับการสอนให้สร้างฟังก์ชั่น mod H=kmod 11H=kmod 11 H = k \bmod \ 11 ตอนนี้ค่าทั้งหมดจะถูกวางทีละแถวใน 9 แถว ยกตัวอย่างเช่นในถังแรกจะมี0,11,22…0,11,22…0, 11, 22 \dots\ ในวินาทีจะมี1,12,23…1,12,23…1, 12, 23 \dotsเป็นต้น สมมติว่าฉันตัดสินใจที่จะเป็นเด็กเลวและใช้ฟังก์ชั่นที่ไม่เฉพาะเจาะจงเป็นฟังก์ชัน hashing ของฉัน - ใช้เวลา 12 ใช้ฟังก์ชั่น Hashing H=kmod 12H=kmod 12 H = k \bmod \ 12 จะส่งผลให้ตารางแฮชที่มีค่า0,12,24…0,12,24…0, 12, 24 \dots ในที่ฝากข้อมูลแรก, …

4
ทำไมต้นไม้สีแดงดำจึงเป็นที่นิยม
ดูเหมือนว่าทุกที่ที่ฉันมองมีการใช้โครงสร้างข้อมูลโดยใช้ต้นไม้สีแดงดำ ( std::setใน C ++, SortedDictionaryใน C #, ฯลฯ ) มีต้นไม้ปกคลุม (a, b), สีแดง - ดำและ AVL ในชั้นเรียนอัลกอริทึมของฉันนี่คือสิ่งที่ฉันได้ออกไป (จากการถามอาจารย์, มองผ่านหนังสือสองสามเล่มและ googling เล็กน้อย): ต้นไม้ AVL มีความลึกเฉลี่ยน้อยกว่าต้นไม้สีแดงดำดังนั้นการค้นหาค่าในต้นไม้ AVL จึงเร็วขึ้นอย่างต่อเนื่อง ต้นไม้สีแดงดำทำการเปลี่ยนแปลงโครงสร้างน้อยกว่าเพื่อความสมดุลตัวเองมากกว่าต้นไม้ AVL ซึ่งอาจทำให้พวกเขาเร็วขึ้นสำหรับการแทรก / ลบ ฉันกำลังพูดถึงสิ่งที่อาจเกิดขึ้นเพราะสิ่งนี้จะขึ้นอยู่กับต้นทุนของการเปลี่ยนแปลงโครงสร้างของต้นไม้เนื่องจากมันจะขึ้นอยู่กับรันไทม์และการดำเนินการ (อาจแตกต่างกันโดยสิ้นเชิงในภาษาที่ใช้งานได้เมื่อต้นไม้ไม่เปลี่ยนรูป) มีมาตรฐานออนไลน์มากมายที่เปรียบเทียบ AVL กับต้นไม้สีแดง - ดำ แต่สิ่งที่ทำให้ฉันสะดุดคือศาสตราจารย์ของฉันพูดโดยทั่วไปว่าโดยปกติคุณจะทำสองอย่าง: ไม่ว่าคุณจะไม่สนใจเรื่องประสิทธิภาพมากนักซึ่งในกรณีนี้ความแตกต่างระหว่าง 10-20% ของ AVL กับสีแดง - ดำในกรณีส่วนใหญ่ไม่สำคัญเลย หรือคุณสนใจเกี่ยวกับการแสดงอย่างมากในกรณีที่คุณทิ้งทั้งต้นไม้ AVL และต้นไม้สีแดงดำและไปกับต้นไม้ …

9
มีคิวลำดับความสำคัญที่มีการแยก
มีโครงสร้างข้อมูลจำนวนมากที่ใช้อินเตอร์เฟสลำดับความสำคัญ - คิว: Insert: ใส่องค์ประกอบเข้าไปในโครงสร้าง Get-Min: คืนองค์ประกอบที่เล็กที่สุดในโครงสร้าง Extract-Min: ลบองค์ประกอบที่เล็กที่สุดในโครงสร้าง โครงสร้างข้อมูลทั่วไปที่ใช้อินเทอร์เฟซนี้คือ (นาที) ฮีป โดยปกติแล้วเวลาที่ใช้งาน (ตัดจำหน่าย) ของการดำเนินการเหล่านี้คือ: แทรก: (บางครั้ง )O ( บันทึกn )O(1)O(1)\mathcal{O}(1)O(logn)O(log⁡n)\mathcal{O}(\log n) Get-Min:O(1)O(1)\mathcal{O}(1) สารสกัด - ขั้นต่ำ:O(logn)O(log⁡n)\mathcal{O}(\log n) Fibonacci กองประสบความสำเร็จในครั้งที่ทำงานเหล่านี้ตัวอย่างเช่น ตอนนี้คำถามของฉันคือต่อไปนี้: มีโครงสร้างข้อมูลที่มีเวลาทำงาน (ตัดจำหน่าย) ต่อไปนี้หรือไม่? แทรก: O(logn)O(log⁡n)\mathcal{O}(\log n) Get-Min: O ( 1 )O(1)\mathcal{O}(1) สารสกัดจากขั้นต่ำ: O ( 1 )O(1)\mathcal{O}(1) หากเราสามารถสร้างโครงสร้างดังกล่าวในเวลาO (n)O(n)\mathcal{O}(n)กำหนดอินพุตที่เรียงลำดับจากนั้นเราสามารถเช่นหาจุดตัดของเส้นบนอินพุตที่เรียงลำดับล่วงหน้าด้วยo ( nเข้าสู่ระบบn)o(nlog⁡n)o\left(\frac{n}{\log …

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

2
โครงสร้างข้อมูลที่มีประสิทธิภาพสำหรับการสร้างเครื่องมือตรวจสอบการสะกดคำอย่างรวดเร็ว
ฉันกำลังพยายามเขียนตัวตรวจการสะกดซึ่งควรใช้กับพจนานุกรมที่มีขนาดค่อนข้างใหญ่ ฉันต้องการวิธีที่มีประสิทธิภาพในการจัดทำดัชนีข้อมูลพจนานุกรมของฉันโดยใช้ระยะทางDamerau-Levenshteinเพื่อกำหนดว่าคำใดที่ใกล้เคียงที่สุดกับคำที่สะกดผิด ฉันกำลังมองหาโครงสร้างข้อมูลที่จะให้ความประนีประนอมระหว่างความซับซ้อนของพื้นที่กับความซับซ้อนของรันไทม์ได้ดีที่สุด จากสิ่งที่ฉันพบบนอินเทอร์เน็ตฉันมีโอกาสในการขายไม่กี่เกี่ยวกับประเภทของโครงสร้างข้อมูลที่จะใช้: Trie นี่เป็นความคิดแรกของฉันและดูใช้งานได้ง่ายและควรมีการค้นหา / แทรกอย่างรวดเร็ว การค้นหาโดยประมาณโดยใช้ Damerau-Levenshtein ควรง่ายต่อการใช้งานที่นี่เช่นกัน แต่มันไม่ได้ดูมีประสิทธิภาพมากนักในแง่ของความซับซ้อนของพื้นที่เนื่องจากคุณมักจะมีค่าใช้จ่ายจำนวนมากกับที่เก็บข้อมูลพอยน์เตอร์ Patricia Trie ดูเหมือนว่าจะใช้เนื้อที่น้อยกว่า Trie ปกติเนื่องจากคุณไม่ต้องเสียค่าใช้จ่ายในการเก็บพอยน์เตอร์ แต่ฉันกังวลเกี่ยวกับการแยกส่วนข้อมูลในกรณีที่พจนานุกรมมีขนาดใหญ่มากเหมือนที่ฉันมี ต้นไม้ต่อท้าย ฉันไม่แน่ใจเกี่ยวกับสิ่งนี้ดูเหมือนว่าบางคนจะพบว่ามีประโยชน์ในการทำเหมืองข้อความ แต่ฉันไม่แน่ใจว่าสิ่งที่จะให้ในแง่ของประสิทธิภาพสำหรับตัวตรวจสอบการสะกด Ternary Search Tree สิ่งเหล่านี้ดูดีมากและในแง่ของความซับซ้อนควรอยู่ใกล้ (ดีกว่า) กับ Patricia Tries แต่ฉันไม่แน่ใจเกี่ยวกับการแยกส่วนหากมันจะดีกว่าแย่กว่า Patricia Tries ต้นไม้ระเบิด ดูเหมือนว่าจะเป็นลูกผสมและฉันก็ไม่แน่ใจว่าจะได้ประโยชน์อะไรจาก Tries และสิ่งที่คล้ายกัน แต่ฉันได้อ่านมาหลายครั้งแล้วว่ามันมีประสิทธิภาพมากสำหรับการทำเหมืองข้อความ ฉันต้องการรับความคิดเห็นเกี่ยวกับโครงสร้างข้อมูลที่ดีที่สุดที่จะใช้ในบริบทนี้และสิ่งที่ทำให้ดีกว่าที่อื่น หากฉันขาดโครงสร้างข้อมูลบางอย่างที่เหมาะสมกว่าสำหรับเครื่องตรวจการสะกดคำฉันก็สนใจเช่นกัน

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

3
ฮาร์ดแวร์ / การนำไปใช้จะมีผลต่อความซับซ้อนของเวลา / พื้นที่ของอัลกอริทึมหรือไม่
ฉันไม่ใช่นักเรียน CS ดังนั้นนี่อาจเป็นคำถามที่โง่ แต่โปรดอดทนกับฉัน ... ในยุคก่อนคอมพิวเตอร์เราสามารถใช้โครงสร้างข้อมูลอาเรย์กับบางอย่างเช่นอาเรย์ของลิ้นชักเท่านั้น เนื่องจากต้องระบุตำแหน่งลิ้นชักด้วยดัชนีที่สอดคล้องกันก่อนที่จะแยกค่าออกมาความซับซ้อนของเวลาในการค้นหาอาร์เรย์คือโดยสมมติว่าเป็นการค้นหาแบบไบนารีO ( l o g( n ) )O(log(n))O(log(n)) อย่างไรก็ตามการประดิษฐ์คอมพิวเตอร์สร้างความแตกต่างใหญ่ คอมพิวเตอร์สมัยใหม่สามารถอ่านจาก RAM ได้อย่างรวดเร็วจนตอนนี้เราพิจารณาความซับซ้อนของเวลาในการค้นหาอาร์เรย์เป็น (แม้จะไม่ใช่ในทางเทคนิคเพราะมันใช้เวลามากขึ้นในการย้ายรีจิสเตอร์ในระยะไกล ฯลฯ )O ( 1 )O(1)O(1) อีกตัวอย่างหนึ่งคือพจนานุกรม Python ขณะที่หนึ่งอาจได้รับการเข้าถึงความซับซ้อนในพจนานุกรมของกับป่วยเป็นลายลักษณ์อักษรมากเกินไปวิธีมายากล (หรือขันโชคร้ายคือกุญแจมีจำนวนมากของการชนกัญชา) ก็มักจะสันนิษฐานว่าเป็นO ( 1 ) ในกรณีนี้ความซับซ้อนของเวลาขึ้นอยู่กับการใช้งานตารางแฮชของพจนานุกรม Python และการใช้ฟังก์ชั่นแฮชของคีย์O(n)O(n)O(n)__hash__O(1)O(1)O(1) สิ่งนี้หมายความว่าฮาร์ดแวร์ / การนำไปใช้นั้นมีผลต่อความซับซ้อนของเวลาของอัลกอริทึมหรือไม่? (ในขณะที่ทั้งสองตัวอย่างเป็นเรื่องเกี่ยวกับโครงสร้างข้อมูลแทนที่จะเป็นอัลกอริธึม แต่ตัวหลังถูกสร้างขึ้นในอดีตและฉันไม่เคยได้ยินเรื่องความซับซ้อนของเวลาในโครงสร้างข้อมูลดังนั้นฉันจึงใช้คำว่า "อัลกอริทึม" ที่นี่) สำหรับฉันแล้วอัลกอริธึมเป็นนามธรรมและแนวคิดซึ่งคุณสมบัติเช่นความซับซ้อนของเวลา / พื้นที่ไม่ควรได้รับผลกระทบจากการใช้งานในลักษณะที่เฉพาะเจาะจงหรือไม่

2
ความแตกต่างระหว่างต้น Radix กับ Patricia คืออะไร?
ฉันกำลังเรียนรู้เกี่ยวกับต้นไม้ Radix (หรือที่เรียกว่าพยายามบีบอัด) และ Patricia พยายาม แต่ฉันค้นหาข้อมูลที่ขัดแย้งกันว่าจริงหรือไม่ ต้นไม้ radix สามารถรับได้จาก trie ปกติ (ไม่บีบอัด) โดยการรวมโหนดกับพาเรนต์เมื่อโหนดเป็นชายด์เดียว นี่ก็ถือเป็นความพยายามของ Patricia โครงสร้างข้อมูลทั้งสองแตกต่างกันอย่างไร? ตัวอย่างเช่นNISTแสดงรายการทั้งสองเหมือนกัน: ต้นแพทริเซีย (โครงสร้างข้อมูล) คำจำกัดความ: การนำเสนอแบบย่อของ trie ซึ่งโหนดใด ๆ ที่เป็นชายน์เดียวถูกรวมเข้ากับพาเรนต์ รู้จักกันในชื่อ radix tree แหล่งข้อมูลมากมายบนเว็บอ้างสิทธิ์เหมือนกัน อย่างไรก็ตามเห็นได้ชัดว่า Patricia พยายามเป็นกรณีพิเศษของต้นไม้ Radix รายการWikipediaพูดว่า: PATRICIA พยายามคือ Radix จะพยายามด้วย Radix เท่ากับ 2 ซึ่งหมายความว่าแต่ละบิตของคีย์จะถูกเปรียบเทียบเป็นรายบุคคลและแต่ละโหนดจะเป็นสองทาง (เช่นซ้ายกับขวา) สาขา ฉันไม่เข้าใจสิ่งนี้จริงๆ ความแตกต่างในวิธีเปรียบเทียบเท่านั้นเมื่อทำการค้นหา แต่ละโหนดจะเป็น "สาขาสองทาง" ได้อย่างไร …

2
ต้นไม้สีแดงดำทุกต้นไม่สมดุลหรือไม่
โดยสัญชาตญาณ "ต้นไม้ที่สมดุล" ควรเป็นต้นไม้ที่ต้นไม้ย่อยด้านซ้ายและขวาในแต่ละโหนดจะต้องมีจำนวนโหนดโดยประมาณเท่ากัน แน่นอนเมื่อเราพูดถึงต้นไม้สีแดงดำ * (ดูคำจำกัดความที่ท้าย) การมีความสมดุลจริง ๆ แล้วเราหมายถึงว่าพวกเขามีความสูงที่สมดุลและในแง่นั้นพวกเขามีความสมดุล สมมติว่าเราพยายามทำสัญชาตญาณข้างต้นเป็นระเบียบดังนี้: คำนิยาม:ต้นไม้ไบนารีเรียกว่า -balance, โดยมี , สำหรับทุกโหนด , ความไม่เท่าเทียมกันμμ\mu0≤μ≤120≤μ≤120 \le \mu \leq \frac{1}{2}NNN μ≤|NL|+1|N|+1≤1−μμ≤|NL|+1|N|+1≤1−μ \mu \le \frac{|N_L| + 1}{|N| + 1} \le 1 - \mu เก็บและสำหรับทุก ๆมีบางโหนดที่คำสั่งข้างต้นล้มเหลว คือจำนวนโหนดในทรีย่อยด้านซ้ายของและคือจำนวนโหนดใต้ต้นไม้ที่มีเป็นรูท (รวมถึงรูท)μ′>μμ′>μ\mu' \gt \mu|NL||NL||N_L|NNN|N||N||N|NNN ฉันเชื่อว่าสิ่งเหล่านี้เรียกว่าต้นไม้ที่มีน้ำหนักสมดุลในวรรณกรรมบางเล่มในหัวข้อนี้ ใคร ๆ ก็สามารถแสดงให้เห็นว่าถ้าต้นไม้ไบนารีกับ nodes คือ -balanced (สำหรับค่าคงที่ ) ดังนั้นความสูงของต้นไม้คือดังนั้นจึงคงการค้นหาที่ดี คุณสมบัติ.nnnμμ\muμ>0μ>0\mu …

1
ตารางแฮชกับต้นไม้ไบนารี
เมื่อติดตั้งพจนานุกรม ('ฉันต้องการค้นหาข้อมูลลูกค้าตามรหัสลูกค้า') โครงสร้างข้อมูลทั่วไปที่ใช้คือตารางแฮชและแผนภูมิการค้นหาแบบไบนารี ฉันรู้ว่าอินสแตนซ์ที่ห้องสมุด C ++ STL ใช้พจนานุกรม (เรียกพวกเขาว่าแผนที่) โดยใช้แผนภูมิการค้นหาแบบทวิภาค (สมดุล) และกรอบงาน. NET ใช้ตารางแฮชภายใต้ประทุน ข้อดีและข้อเสียของโครงสร้างข้อมูลเหล่านี้คืออะไร มีตัวเลือกอื่นที่เหมาะสมในบางสถานการณ์หรือไม่? โปรดทราบว่าฉันไม่สนใจโดยเฉพาะอย่างยิ่งในกรณีที่ปุ่มมีโครงสร้างพื้นฐานที่แข็งแกร่งกล่าวว่าพวกเขาเป็นจำนวนเต็มทั้งหมดระหว่าง 1 ถึง n หรือบางสิ่งบางอย่าง

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 

1
มีโครงสร้างข้อมูล 'สตริงสแต็ค' ที่สนับสนุนการดำเนินงานของสตริงเหล่านี้หรือไม่
ฉันกำลังมองหาโครงสร้างข้อมูลที่เก็บชุดสตริงไว้ในชุดอักขระสามารถทำการดำเนินการต่อไปนี้ได้ เราแสดงว่าเป็นโครงสร้างข้อมูลการจัดเก็บชุดของสตริงSD ( S ) SΣΣ\SigmaD (S)D(S)\mathcal{D}(S)SSS Add-Prefix-Setบน : กำหนดชุดของ (อาจว่างเปล่า) สตริงซึ่งขนาดถูก จำกัด ด้วยค่าคงที่และความยาวสตริงถูก จำกัด โดยค่าคงที่ส่งคืน\}) ทั้งสองนี้คง bounding มีทั่วโลก: พวกเขาเป็นเหมือนกันสำหรับปัจจัยการผลิตทั้งหมดTT D ( { t s | t ∈ T , s ∈ S } ) TD (S)D(S)\mathcal{D}(S)TTTD ({ts | t∈T , s ∈ S} )D({ts | t∈T,s∈S})\mathcal{D}( \{ t s\ …

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