אז ככה:
אודה שלא התעמקתי עד הסוף, אבל כפי הבנתי הפונקציה ממירה אינדקס לינארי לאינדקס N מימדי, בהנתן גודל המימדים הרצוי.
אני אנסה להמחיש על ידי דוגמא:
נניח שאני רוצה לבנות בנין הדומה למבנה קוביה הונגרית, מימדי הקוביה הן 3x3x3.
אם כן, הבניין יכיל 3 קומות ובכל קומה 9 דירות: 3 לאורך ו-3 לרוחב. סה"כ 27 דירות.
אני רוצה לתת מספר לכל דירה.
אני אתחיל בסריקה קומה אחר קומה מ-1 עד 3, ובכל קומה אני אסרוק את הדירות שורה שורה, בכל פעם אני אתן מספר עוקב מ-1 עד 27.
(למעשה, מספרי הקומות הן 0 עד 2 ומספרי הדירות יהיו 0-26. למה? כי מתכנתים אמיתיים לא סופרים מ-1...)
בוא נראה, מה האינדקס של כל דירה? הוא תלת מימדי [x,y,z]
X – קומה
Y – שורה
Z - טור
מספר דירה |
אינדקס |
0 |
[0,0,0] |
1 |
[0,0,1] |
2 |
[0,0,2] |
3 |
[0,1,0] |
4 |
[0,1,1] |
5 |
[0,1,2] |
כעת אני אשאל: היכן נמצאת דירה מספר 12 בקוביה? האינדקס הלינארי של הדירה הוא 12, אבל מה האינדקס התלת מימדי שלה?
נכון, היא בקומה השניה (1) בשורה השניה (1) ובטור הראשון (0)
כלומר באינדקס [1,1,0]
(שים לב שוב שהיא הדירה ה-13 כי מתחילים מ-0...)
הפונקציה unravel_index מבצעת את הפעולה שעשיתי למעלה: היא מקבלת שני ארגומנטים, א. האינדקס הלינארי, ב. מימדי התחום
ומחזירה את האינדקס ה-N מימדי.
בדוגמא שלנו, הקריאה
unravel_index(12,(3,3,3))
אמורה להחזיר את האינדקס התלת מימדי: (1,1,0)