אלגוריתם המרת טבלה לעץ בצורה אופטימלית
-
יש לי נתונים המסודרים בטבלה לפי מספר שדות.
אני רוצה להפוך אותם לעץ, בצורה שתמנע בזבוז מקום.
אשמח לעזרה!לדוגמה:
בטבלה יש 4 שדות- שם, פעולה, תאריך, מצבהשורות בטבלה:
יהודה, ריצה, כ' טבת, בריא
זבולון, מנוחה, כ' טבת, בריא
יהודה, ישיבה, ל' טבת, חולה
יששכר, ריצה, ל' טבת, בריא
זבולון, ישיבה , כ' טבת, בריא
יהודה, ריצה, כו טבת, בריא
זבולון, מנוחה, כה טבת, בריאהאלגוריתם צריך לבחור איזה שדה לשים בראש ואיזה אחריו, בצורה שתמנע כפילות שלא לצורך.
בדוגמה שלנו - לכאורה ודאי שהשדה הראשון (ה'אב' הראשי בעץ) צריך להיות שדה 'מצב', כי כמעט כולם בריאים.
אבל אח"כ לא ברור מה עדיף לשים, את השדה 'תאריך' כי יש כמה בכ' טבת וכמה בל'? את השדה 'שם' כי יש הרבה יהודה וזבולון? את השדה 'פעולה' כי לרוב כולם רצים או נחים?מקווה שהשאלה הובנה בצורה מספקת, אשמח להסביר עוד אם צריך.
תודה רבה!
-
@Y-Excel-Access תלך לפי מספר האפשרויות הצפוי.
בעמודות 2,4 ישנם כעת רק שני ערכים (בריא/חולה ריצה/ישיבה) וגם אם יהיו יותר הם עדיין עמודות "מצב", כלומר הם מכילים את הערכים שהכי חוזרים על עצמם.
עמודה 1 יכולהל להיות כותרת כי יהיו הרבה תאריכים פר אדם,
ואילו העמודה של התאריכים הכי פחות חוזרת על עצמה (מס' התאריכים יהיה משמעותי יותר מס' השורות ביום).שים לב שהשמשתי בתובנה מה הנתונים מכילים, אם זה אלגוריתם אז הוא צריך כמות מידע משמעותית יותר ממה שהצגת פה. האלגוריתם הוא DISTINCT לכל עמודה ובחירת העמודה עם הכי פחות ערכים לכותרת רמה 1 וכולי.
מהלשון שלך ("לחסוך מקום") נשמע שאתה מחפש לחסוך לדיסק, שים לב שקובץ אקסל עם הוא דחיסה שאמורה לעשות את העבודה הזו.
אם מדובר לתצוגה שים לב שחלוקה לרמות היא גם עניין של ניווט ויכול להיות עץ שיהיה מאוד לא נח לשימוש למרות שהוא חסכני (למשל איתור אדם שאינך יודע מה היה מצבו). -
@Y-Excel-Access כתב באלגוריתם המרת טבלה לעץ בצורה אופטימלית:
אח"כ לא ברור מה עדיף לשים, את השדה 'תאריך' כי יש כמה בכ' טבת וכמה בל'? את השדה 'שם' כי יש הרבה יהודה וזבולון? את השדה 'פעולה' כי לרוב כולם רצים או נחים?
עדיף לבחור את הערך שחוזר על עצמו הכי הרבה פעמים בטור, אבל צריך להתייחס בספירה רק לשורות בטבלה שערך האב בעץ זהה לאותו ערך באותו טור בטבלה.
לדוגמה - בדוגמה שלך בסיס העץ מחולק לשתיים, בריא וחולה, אז שבאים לחשב את הילדים של בריא צריך למצוא באיזה טור יש ערך שחוזר על עצמו הכי הרבה פעמים, אבל צריך להתעלם משורות שמכילות את הערך חולה בטור מצב, כי זה לא רלוונטי לאב בריא.
אם יש שני טורים עם מספר כפילויות זהה (כמו בדוגמא שלך), אז לפו"ר לא משנה איזה מהם תבחר.