ความแตกต่างระหว่างเส้นโค้งการเติมช่องว่างต่าง ๆ คืออะไร?


14

เส้นโค้งการเติมพื้นที่มีความสำคัญในแอปพลิเคชั่นกราฟิกจำนวนมากเพราะมันช่วยให้เห็นตำแหน่งเชิงพื้นที่ เรามักจะได้ยินเกี่ยวกับอัลกอริทึมที่แตกต่างกันโดยใช้ Z-curves, รหัสมอร์ตัน, Hilbert curves ฯลฯ อะไรคือความแตกต่างระหว่างบางส่วนของเส้นโค้งที่แตกต่างกันเหล่านี้และวิธีนำไปใช้กับแอปพลิเคชันต่างๆ


1
ลองหนังสือCurves พื้นที่บรรจุ - Introduction กับการประยุกต์ใช้ในการคำนวณทางวิทยาศาสตร์
lhf

ดูยังมีส่วน 2.1.1.2 เสม็ดของฐานรากของโครงสร้างหลายมิติและตัวชี้วัดข้อมูล
lhf

คำตอบ:


13

ความแตกต่างคือการทำแผนที่รักษาพื้นที่และวิธีการเข้ารหัส / ถอดรหัสคีย์ทำได้ง่ายเพียงใด กระดาษ "การจัดกลุ่มเชิงเส้นของวัตถุที่มีคุณสมบัติหลายอย่าง" โดย HV Jagadish กล่าวว่า: "จากการวิเคราะห์เชิงพีชคณิตและจากการจำลองด้วยคอมพิวเตอร์เราแสดงให้เห็นว่าในสถานการณ์ส่วนใหญ่การทำแผนที่ฮิลแบร์ตทำได้ดีกว่าแผนที่ที่ดีที่สุด วรรณกรรม". ในทางตรงกันข้ามคำสั่ง z นั้นใช้ง่ายกว่าเล็กน้อยเช่นเปรียบเทียบวิธีการต่าง ๆ ที่ระบุไว้ในBit Twiddling Hacksสำหรับ z-order และWikipediaสำหรับคำสั่ง Hilbert

สำหรับแอพพลิเคชั่นฉันคิดว่าประโยชน์หลักในการใช้เส้นโค้งการเติมพื้นที่คือพวกเขาจับคู่จุดจากพื้นที่มิติที่สูงขึ้นไปยังพื้นที่ที่มีมิติต่ำกว่า ตัวอย่างเช่นพวกเขาทำให้เป็นไปได้ในการค้นหาหน้าต่างสำหรับจุดที่ใช้ดัชนีฐานข้อมูล B-tree แบบดั้งเดิม ในทางกลับกันข้อเสียคือต้องรู้ขอบเขตของอินพุตล่วงหน้าเนื่องจากเป็นการยากที่จะ "ปรับขนาด" การแม็พในภายหลัง

PS: "Z-curve" เหมือนกับ "Morton code"

PPS: การแมปเพิ่มเติมรวมถึงเส้นโค้ง PeanoและสำหรับแอปพลิเคชันดูGeohashด้วย


9

เส้นโค้งการเติมพื้นที่เหล่านั้นอนุญาตให้รักษาตำแหน่งในหลายมิติเมื่อคุณ "เดิน" ตามแนวเส้นโค้ง

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

ตัวอย่างที่เป็นรูปธรรมของเส้นโค้ง Z-Order คือการหมุนของพื้นผิว: ซึ่งเป็นการเพิ่มอัตราแคชแคชสำหรับการอ่านพื้นผิวบน GPU (ดูรูปภาพในบทความเกี่ยวกับ Z-Curve https://en.wikipedia.org/wiki/Z-order_curve )

หากพื้นผิวถูกเก็บไว้เป็นเส้นตรงคุณจะได้รับแคชสูงสุดถ้าคุณแสดงพื้นผิวเป็นภาพ 2D แต่ถ้าคุณหมุนมัน 90 องศาบนหน้าจอคุณจะเข้าสู่สถานการณ์กรณีที่เลวร้ายที่สุด (แคชพลาดสำหรับการอ่านทุกพื้นผิว) .

ดังนั้นจึงเป็นการดีกว่าที่จะแลกเปลี่ยนสถานการณ์กรณีที่ดีที่สุดของคุณเล็กน้อยและลดลงและมีแคชที่ดีกว่าสำหรับรูปแบบส่วนใหญ่

จากบันทึกส่วนตัวจากสิ่งที่ฉันได้เห็นเส้นโค้งอื่น ๆ อาจต้องใช้ขั้นตอนแบบเรียกซ้ำเพื่อการคำนวณและส่งผลให้มีค่าใช้จ่ายสูงกว่า Z-Curve โดยมีกำไรน้อยที่สุดในแง่ของการเชื่อมโยงท้องถิ่น ดังนั้นฉันไม่เคยได้ยินเกี่ยวกับเส้นโค้งเหล่านั้นที่ใช้กับจุดประสงค์ในทางปฏิบัติยกเว้นเป็นงานวิจัยในวิชาคณิตศาสตร์หรือการแสดงความคิดสร้างสรรค์ / ตลก

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