CTE רקורסיבי

יום רביעי, מאי 26, 2010

CTE = Common Table Expression הוצג ב-SQL Server 2005, ומדובר בסינטקס שמאפשר ליצור אובייקטים אד-הוק במהלך השליפה; וזו חלופה מתאימה לשאילתות משנה. ל-מ-ש-ל: אנחנו רוצים לשלוף את שמות הטבלאות בעלות השם הכי ארוך. לכאורה ניתן לשלוף את ((Max(Len(name מתוך sys.tables, אבל אם יש מספר טבלאות בעלות אותו אורך מקסימלי- נקבל רק אחת. ניתן, איפוא, להיעזר בשליפה משנית כך: Select * From (Select Max(Len(name)) Over() Oreh, ...

עץ פורש מינימלי

יום שלישי, מאי 25, 2010

בעיית העץ הפורש המינימלי היא בעייה קלאסית בתחום תורת הגראפים. לא כולם אוהבים או מתמצאים במתימטיקה, אלא שדווקא תורת הגראפים היא תחום קל להבנה אינטואיטיבית – ללא נוסחאות, ואפשר בקלות להבין מה הבעייה ואפילו כיצד לפתור אותה- מכיוון שהבעיות ויזואליות; בעיקר בבעייה זו. אשתמש באלגוריתם של Prim אותו אממש בעזרת CTE רקורסיבי: 1. נמספר את הקשתות בסדר עולה לפי האורך, ונתחיל עם הקטנה ביותר. 2. "נצבור" בעמודה S_in את הקשתות הכלולות בעץ הפורש המינימלי (כלומר- שני הקודקודים של כל קשת). 3. כל...

Packing Date Intervals

יום ראשון, מאי 2, 2010

איציק בן-גן פירסם פוסט שזה כותרתו, והוא עוסק באתגר הבא: נתונה טבלת פעילויות שכל אחת נמשכת מתאריך (התחלה) עד תאריך (סיום), ויש לחשב את תקופות הפעילות השונות, כלומר- התקופות בהן מתבצעת איזו פעילות. בצורה ציורית ניתן היה לתאר זאת כלוח גאנט של הפעילויות השונות שבתחתיתו נסמן את ההיטל המשותף של הפעילויות השונות, וכך נקבל מספר קטעים שלכל אחד יש התחלה וסוף שבינהם יש פעילויות, ובין קטע לקטע אין אף פעילות. הנה דוגמה בה תשע פעילויות מתקבצות לשלוש תקופות (הקטעים האדומים העבים על הציר האופקי למטה): הפתרון של איציק מתבסס באופן כללי על Join בין טבלת הפעילויות לטבלת תאריכים (כמו טבלת מספרים אבל עם רצף...