สำหรับคำถามประเภทแรก เราต้องการหาระยะทางจากจุด ไปยังจุด หรือจุดเริ่มต้น
เราจะเริ่มจากการหา ที่น้อยที่สุดที่ (Hilbert Curve ระดับชั้นที่ ) ครอบคลุมถึงจุด โดยหาได้จากคุณสมบัติที่ว่า มีขนาด
เราจะสามารถแบ่ง ออกเป็น 4 อันดังภาพในโจทย์ (ต่อจากนี้จะเรียกว่า โซน) จากการที่เราเลือก ที่น้อยที่สุดแล้ว รับประกันได้ว่าจุด และ จะไม่อยู่ในโซนเดียวกัน
นอกจากนี้ สังเกตว่าระยะทางจากจุดเริ่มต้นไปยังจุดสิ้นสุดของ จะมีค่าเท่ากับ เสมอ และจุด เป็นจุดเริ่มต้นของ ทำให้เราสามารถคำนวณระยะทางของโซนที่เราจำเป็นต้องเดินผ่านทั้งโซนนั้นได้เลย แล้วบวกด้วยระยะทางจากจุดเริ่มต้นของโซนที่มี ไปถึงจุด เอง
เราสามารถหาได้โดยใช้ Recursion หาระยะทางจากจุดเริ่มต้นไปยังจุด ซึ่งมาจากการแปลงพิกัดของจุด โดยสมมุติให้ให้จุดเริ่มต้นของโซนนั้นเป็นจุด
เนื่องจาก Recursion จะคิดระยะทางไล่จาก โดยมี จะเป็น Base Case ที่เราสามารถตอบระยะทางได้ทันที จะได้
Time Complexity: ต่อหนึ่งคำถาม
สำหรับคำถามประเภทที่สอง เราต้องการหาพิกัดของจุดที่ห่างจากจุด หรือจุดเริ่มต้น เป็นระยะ
เราจะทำเช่นเดียวกันกับคำถามแรกคือหา ที่น้อยที่สุดที่ระยะทางในการเดินผ่าน มีค่าอย่างน้อย ซึ่งหาได้จากคุณสมบัติที่ได้กล่าวไว้ในคำถามประเภทแรก
เมื่อทราบ แล้ว เราจะสามารถทราบได้ทันทีว่าพิกัดของคำตอบจะอยู่ในโซนไหน ผ่านการเทียบกับระยะทางที่ต้องเดินจากจุดเริ่มต้นไปยังโซนต่าง ๆ หากโซนใดที่เดินผ่านแล้วระยะทางยังไม่ถึง แสดงว่าจุดที่เป็นคำตอบไม่ได้อยู่ภายในโซนนั้น ทำให้เหลือเพียงหนึ่งโซนที่รับประกันได้ว่า จุดที่เป็นคำตอบต้องอยู่ในนั้น เราจะทำการ Recursive หาพิกัดของจุดที่เป็นคำตอบในโซนนั้นแทนโดยอ้างอิงจากระยะทาง ซึ่งมาจากการหักระยะทางของโซนที่ต้องเดินผ่านแน่ๆ ออกจาก
เนื่องจาก Recursion จะคิดระยะทางไล่จาก โดยมี จะเป็น Base Case ที่เราสามารถตอบระยะทางได้ทันที จะได้
Time Complexity: ต่อหนึ่งคำถาม
ตัวอย่างการแปลงทางเรขาคณิตของ กรณีที่ เป็นจำนวนเต็มคู่ และโจทย์ต้องการทราบระยะทางไปยังจุด
กำหนดให้ คือขนาดของ
ฟังก์ชันในการคำนวณคำตอบ จะกำหนดให้จุดเริ่มต้นของ อยู่ที่มุมล่างซ้ายเสมอ ดังนั้นสำหรับโซนที่มีจุดเริ่มต้นต่างไปจากนี้ จะต้องทำการแปลงทางเรขาคณิตก่อน ซึ่งสามารถแบ่งออกเป็น 4 กรณี ตามโซนที่จุด อยู่ ดังนี้
- โซนที่ 1 (สีแดง) จุดเริ่มต้นของโซนนี้ เป็นจุดเริ่มต้นเดียวกันกับ จึงทำให้
- โซนที่ 2 (สีเหลือง) ถึงแม้ว่าโซนนี้จะมีตำแหน่งจุดเริ่มต้น และจุดจบเหมือนกับ แต่ เป็นจำนวนเต็มคี่ ทำให้เราต้องสะท้อนบนล่างแล้วหมุนทวนเข็ม รอบจุดเริ่มต้น จึงทำให้
- โซนที่ 3 (สีเขียว) จะทำเหมือนกับโซนที่ 2 ทุกประการ เนื่องจากตำแหน่งจุดเริ่มต้น และจุดจบเหมือนกับโซนที่ 2 ทำให้
- โซนที่ 4 (สีฟ้า) จุดเริ่มต้นอยู่มุมขวาบน และจุดจบอยู่มุมซ้ายบน ต้องหมุน รอบจุดเริ่มต้น จึงทำให้