דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. עזרה בהבנת קוד פייתון (NCLS)

עזרה בהבנת קוד פייתון (NCLS)

מתוזמן נעוץ נעול הועבר תכנות
16 פוסטים 4 כותבים 518 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • D מנותק
    D מנותק
    davidnead
    כתב ב נערך לאחרונה על ידי davidnead
    #1

    שלום
    אני מתרגם אלוגריתם מסוים מפייתון לJS. לא אני כתבתי אותו, הוא כולל לא מעט מתמטיקה מתקדמת כך שלא הכל אני מצליח להבין היטב. בפרט שהניסיון שלי עם פייתון רדוד.
    נתקעתי בקטע הבא:

    ncls = NCLS(starts, ends, ids.astype("int64"))
    starts = np.arange(n)
    ends = np.arange(1, n+1)
    ids = starts
    ids, overlaps = ncls.all_overlaps_both(starts, ends, ids.astype("int64"))
    
    

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

    אם מישהו מצליח להבין מה בדיוק NCLS בכלל וall_overlaps_both בפרט עושה - אשמח להסבר, שיעזור לי מן הסתם להבין את הקוד הספציפי שלי.

    חגיח תגובה 1 תגובה אחרונה
    0
    • חגיח מנותק
      חגיח מנותק
      חגי
      השיב לdavidnead ב נערך לאחרונה על ידי חגי
      #2

      @davidnead
      אפשר את הקוד המלא?

      D תגובה 1 תגובה אחרונה
      0
      • D מנותק
        D מנותק
        davidnead
        השיב לחגי ב נערך לאחרונה על ידי
        #3

        @חגי כתב בעזרה בהבנת קוד פייתון (NCLS):

        @davidnead
        אפשר את הקוד המלא?

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

        from ncls import NCLS
        
        import pickle
        import pandas as pd
        import numpy as np
        
        
        starts = np.array(list(reversed([3, 5, 8])), dtype=np.int)
        ends = np.array(list(reversed([6, 7, 9])), dtype=np.int)
        indexes = np.array(list(reversed([0, 1, 2])), dtype=np.int)
        
        # starts = np.array([3, 5, 8], dtype=np.int)
        # ends = np.array([6, 7, 9], dtype=np.int)
        # indexes = np.array([0, 1, 2], dtype=np.int)
        
        ncls = NCLS(starts, ends, indexes)
        
        starts2 = np.array([1, 6])
        ends2 = np.array([10, 7])
        indexes2 = np.array([0, 1])
        
        print(ncls.all_overlaps_both(starts2, ends2, indexes2))
        
        
        תגובה 1 תגובה אחרונה
        0
        • חגיח מנותק
          חגיח מנותק
          חגי
          כתב ב נערך לאחרונה על ידי
          #4

          זה עוזר לך? ביקשתי מCHATGPT להסביר את הקוד ולתרגם אותו לJS

          what does this code do?

          ncls = NCLS(starts, ends, ids.astype("int64"))
          starts = np.arange(n)
          ends = np.arange(1, n+1)
          ids = starts
          ids, overlaps = ncls.all_overlaps_both(starts, ends, ids.astype("int64"))
          

          This code appears to be using an object of the NCLS class, which stands for "non-contiguous label-set" and is used to efficiently query overlapping intervals in a sequence.

          The NCLS object is constructed using three arrays: starts, ends, and ids. These arrays represent the start and end positions of intervals in the sequence, and a unique identifier for each interval.

          The all_overlaps_both method of the NCLS object is then called with the same starts, ends, and ids arrays as arguments. This method returns two arrays: ids and overlaps. The ids array is a subset of the input ids array, containing only the identifiers of the intervals that overlap with at least one other interval. The overlaps array is a boolean array of the same length as the input ids array, where True indicates that the corresponding interval overlaps with at least one other interval and False indicates that it does not.

          It's worth noting that the input ids array is cast to the int64 data type before being passed to the NCLS object constructor and the all_overlaps_both method. This is likely because the NCLS class and its methods expect integer values as input.

          can you convert that to javascript
          Sure! Here is a possible implementation of the NCLS class and the all_overlaps_both method in JavaScript:

          class NCLS {
            constructor(starts, ends, ids) {
              // Check that the input arrays have the same length
              if (starts.length !== ends.length || starts.length !== ids.length) {
                throw new Error("Input arrays must have the same length");
              }
              this.starts = starts;
              this.ends = ends;
              this.ids = ids;
            }
          
            allOverlapsBoth(starts, ends, ids) {
              // Check that the input arrays have the same length
              if (starts.length !== ends.length || starts.length !== ids.length) {
                throw new Error("Input arrays must have the same length");
              }
              const overlaps = new Array(starts.length).fill(false);
              const overlappingIds = [];
              for (let i = 0; i < starts.length; i++) {
                for (let j = 0; j < starts.length; j++) {
                  if (i === j) continue; // Don't compare an interval with itself
                  if (starts[i] < ends[j] && starts[j] < ends[i]) {
                    // The intervals i and j overlap
                    overlaps[i] = true;
                    overlaps[j] = true;
                    if (!overlappingIds.includes(ids[i])) overlappingIds.push(ids[i]);
                    if (!overlappingIds.includes(ids[j])) overlappingIds.push(ids[j]);
                  }
                }
              }
              return { ids: overlappingIds, overlaps };
            }
          }
          
          // Example usage:
          const ncls = new NCLS([0, 5, 10], [5, 10, 15], [1, 2, 3]);
          const { ids, overlaps } = ncls.allOverlapsBoth([0, 5, 10], [5, 10, 15], [1, 2, 3]);
          console.log(ids); // [1, 2, 3]
          console.log(overlaps); // [true, true, true]
          

          This implementation creates an NCLS object with three properties: starts, ends, and ids. The allOverlapsBoth method compares each pair of intervals and sets the corresponding element in the overlaps array to true if the intervals overlap. It also adds the identifiers of the overlapping intervals to the overlappingIds array. Finally, the method returns an object with two properties: ids, containing the overlapping identifiers, and overlaps, containing a boolean array indicating which intervals overlap.

          D yossizY 3 תגובות תגובה אחרונה
          0
          • D מנותק
            D מנותק
            davidnead
            השיב לחגי ב נערך לאחרונה על ידי
            #5

            @חגי איזה קטע, כנראה כל עם ישראל מדבר על זה לאחרונה. גם אני בדיוק עלה בדעתי לנסות שם את מזלי, שאלתי שאלה קצת יותר ממוקדת, ואני באמצע לנסות להבין אם התשובה עזרה לי. הנה:
            The all_overlaps_both function is a part of the NCLS (Nested Containment List Structures) library in Python. NCLS is a data structure that allows for fast overlap queries between intervals (also known as ranges).

            The all_overlaps_both function takes in two NCLS objects and returns a list of tuples, where each tuple represents an overlap between an interval from the first NCLS object and an interval from the second NCLS object. Each tuple contains four elements: the start and end indices of the overlapping interval from the first NCLS object, and the start and end indices of the overlapping interval from the second NCLS object.

            For example, if you have two NCLS objects ncls1 and ncls2, you can use the all_overlaps_both function as follows:

            Copy code

            overlaps = ncls1.all_overlaps_both(ncls2)
            

            The overlaps variable will now contain a list of tuples representing the overlaps between the intervals in ncls1 and ncls2.

            It's important to note that the all_overlaps_both function only returns overlaps between intervals that are present in both NCLS objects. If you want to find all overlaps between the intervals in two NCLS objects, regardless of whether the intervals are present in both NCLS objects, you can use the all_overlaps function instead.

            תגובה 1 תגובה אחרונה
            1
            • D מנותק
              D מנותק
              davidnead
              השיב לחגי ב נערך לאחרונה על ידי davidnead
              #6

              @חגי כתב בעזרה בהבנת קוד פייתון (NCLS):

              זה עוזר לך? ביקשתי מCHATGPT להסביר את הקוד ולתרגם אותו לJS

              what does this code do?

              ncls = NCLS(starts, ends, ids.astype("int64"))
              starts = np.arange(n)
              ends = np.arange(1, n+1)
              ids = starts
              ids, overlaps = ncls.all_overlaps_both(starts, ends, ids.astype("int64"))
              

              This code appears to be using an object of the NCLS class, which stands for "non-contiguous label-set" and is used to efficiently query overlapping intervals in a sequence.

              The NCLS object is constructed using three arrays: starts, ends, and ids. These arrays represent the start and end positions of intervals in the sequence, and a unique identifier for each interval.

              The all_overlaps_both method of the NCLS object is then called with the same starts, ends, and ids arrays as arguments. This method returns two arrays: ids and overlaps. The ids array is a subset of the input ids array, containing only the identifiers of the intervals that overlap with at least one other interval. The overlaps array is a boolean array of the same length as the input ids array, where True indicates that the corresponding interval overlaps with at least one other interval and False indicates that it does not.

              It's worth noting that the input ids array is cast to the int64 data type before being passed to the NCLS object constructor and the all_overlaps_both method. This is likely because the NCLS class and its methods expect integer values as input.

              can you convert that to javascript
              Sure! Here is a possible implementation of the NCLS class and the all_overlaps_both method in JavaScript:

              class NCLS {
                constructor(starts, ends, ids) {
                  // Check that the input arrays have the same length
                  if (starts.length !== ends.length || starts.length !== ids.length) {
                    throw new Error("Input arrays must have the same length");
                  }
                  this.starts = starts;
                  this.ends = ends;
                  this.ids = ids;
                }
              
                allOverlapsBoth(starts, ends, ids) {
                  // Check that the input arrays have the same length
                  if (starts.length !== ends.length || starts.length !== ids.length) {
                    throw new Error("Input arrays must have the same length");
                  }
                  const overlaps = new Array(starts.length).fill(false);
                  const overlappingIds = [];
                  for (let i = 0; i < starts.length; i++) {
                    for (let j = 0; j < starts.length; j++) {
                      if (i === j) continue; // Don't compare an interval with itself
                      if (starts[i] < ends[j] && starts[j] < ends[i]) {
                        // The intervals i and j overlap
                        overlaps[i] = true;
                        overlaps[j] = true;
                        if (!overlappingIds.includes(ids[i])) overlappingIds.push(ids[i]);
                        if (!overlappingIds.includes(ids[j])) overlappingIds.push(ids[j]);
                      }
                    }
                  }
                  return { ids: overlappingIds, overlaps };
                }
              }
              
              // Example usage:
              const ncls = new NCLS([0, 5, 10], [5, 10, 15], [1, 2, 3]);
              const { ids, overlaps } = ncls.allOverlapsBoth([0, 5, 10], [5, 10, 15], [1, 2, 3]);
              console.log(ids); // [1, 2, 3]
              console.log(overlaps); // [true, true, true]
              

              This implementation creates an NCLS object with three properties: starts, ends, and ids. The allOverlapsBoth method compares each pair of intervals and sets the corresponding element in the overlaps array to true if the intervals overlap. It also adds the identifiers of the overlapping intervals to the overlappingIds array. Finally, the method returns an object with two properties: ids, containing the overlapping identifiers, and overlaps, containing a boolean array indicating which intervals overlap.

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

              --עריכה--
              חוץ מבעיה קטנה, הקוד שלהם לא באמת עובד, עם הדוגמה שלהם. אבל אני מניח שזה משהו פתיר, בא נראה אם זה מצליח להמחיש את העיקרון.

              תגובה 1 תגובה אחרונה
              0
              • yossizY מנותק
                yossizY מנותק
                yossiz
                השיב לחגי ב נערך לאחרונה על ידי yossiz
                #7

                @חגי הבוט הזה מדבר הרבה שטויות, מי שמכבד אותו מזלזל במוח האנושי...
                לדעתי מקומו בפורום זה אמור להיות מוגבל
                (בפלטים הנל שהביאו חגי ודודניד יש כמה טעויות)

                בכל זאת ולמורת רוחי הפלט ש-@davidnead הביא סגר לי את הפינה האחרונה שעוד לא הבנתי

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

                הבנאי NCLS מקבל רשימה של התחלות של טווחים, רשימה מקבילה של סיומי טווחים, ורשימה מקבילה של מזהים

                הפונקציה all_overlaps_both (זה עזר לי ה-AI המטופש להבין...) היא מתודה של מבנה ncls שמקבלת דאטה של רשימת טווחים שנייה והיא מוציאה רשימה של כל הטווחים של שני הצדדים שחופפים אחד את השני

                מחיפוש מהיר ב-npm לא מצאתי ספרייה שמממשת את המבנה הזה (nested containment lists) אבל יש מבנים אחרים מוכרים (לדוגמה interval tree) אומנם פחות יעילים שמאפשרים את זה.

                אם מדובר ברשימה קצרה, אז כמובן אפשר לממש לבד, רק ברשימות ארוכות יהיה חשיבות ליעילות

                📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                D 2 תגובות תגובה אחרונה
                5
                • D מנותק
                  D מנותק
                  davidnead
                  השיב לyossiz ב נערך לאחרונה על ידי davidnead
                  #8

                  @yossiz כתב בעזרה בהבנת קוד פייתון (NCLS):

                  @חגי הבוט הזה מדבר הרבה שטויות, מי שמכבד אותו מזלזל במוח האנושי...
                  לדעתי מקומו בפורום זה אמור להיות מוגבל

                  בכל זאת ולמורת רוחי הפלט ש-@davidnead הביא סגר לי את הפינה האחרונה שעוד לא הבנתי

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

                  הבנאי NCLS מקבל רשימה של התחלות של טווחים, רשימה מקבילה של סיומי טווחים, ורשימה מקבילה של מזהים

                  הפונקציה all_overlaps_both (זה עזר לי ה-AI המטופש להבין...) היא מתודה של מבנה ncls שמקבלת דאטה של רשימת טווחים שנייה והיא מוציאה רשימה של כל הטווחים של שני הצדדים שחופפים אחד את השני

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

                  yossizY תגובה 1 תגובה אחרונה
                  0
                  • D מנותק
                    D מנותק
                    davidnead
                    השיב לyossiz ב נערך לאחרונה על ידי
                    #9

                    @yossiz כתב בעזרה בהבנת קוד פייתון (NCLS):

                    אם מדובר ברשימה קצרה, אז כמובן אפשר לממש לבד, רק ברשימות ארוכות יהיה חשיבות ליעילות

                    מדובר ברשימה ארוכה מאוד ובאלוגריתם כבד, ויש חשיבות משמעותית ליעילות. אבל אני עוד לא שם. קודם צריך להבין היטב מה הקוד עושה לפני שאחשוב איך לייעל אותו.
                    ממה שקראתי בתיעוד שם את היעילות הם משיגים לא רק ע"י מבנה נתונים טוב אלא ע"י שימוש בCpython.

                    תגובה 1 תגובה אחרונה
                    0
                    • yossizY מנותק
                      yossizY מנותק
                      yossiz
                      השיב לdavidnead ב נערך לאחרונה על ידי yossiz
                      #10

                      @davidnead זה הרבה יותר פשוט ממה שאתה חושש

                      נגיד שיש לך רשימה של טווחים. מה זה טווח? זה זוג מספרים, אחד שמסמל התחלה של משהו ואחד שמסמל את הסוף. זה יכול להיות טווחים של זמן, נגיד רשימה של כל טווחי הזמן שבהם ירד גשם במקום כלשהו בעולם, זה יכול להיות טווחים של מקום, לדוגמה בשורות מתוך ספר, צריך לצבוע מתו X עד תו Y. או מה שלא יהיה, מקווה שהרעיון מובן

                      עכשיו, נגיד שאתה רוצה למצוא איזה טווחים מתוך הרשימה חופפים את הטווח J->K, (כאשר J מסמל את התחלת הטווח ו-K מסמל את הסוף),
                      הדרך הפשוטה היא לעבור על כל הרשימה ולבדוק לכל טווח מתוך הרשימה אם ההתחלה שלו הוא פחות מ-K והסוף שלו יותר מ-J אז הוא חופף את הטווח J->K . אבל הזמן של חיפוש זה יעלה בצורה ליניארית עם אורך הרשימה (סליחה על המילים הגבוהות, הכוונה שחיפוש ברשימה של 2 מליון טווחים יארוך פי 1000 מחיפוש ברשימה של 2000 טווחים)

                      אז מצאו דרך חכמה לשמור את הנתונים בסדר מסויים שמאפשר תשאולים יעילים יותר

                      זה מבנה הנתונים NCLS

                      עד כאן מובן?

                      עכשיו ל-API של הספרייה,

                      הבנאי מקבל שלוש רשימות, 1) התחלות של טווחים 2) סופי טווחים 3) מזהים של טווחים (id כלשהו שמזהה את השורה)
                      שלושת הרשימות באורך זהה
                      הטווח הראשון בנוי מהאבר הראשון של 1 שזה מייצג את התחלת הטווח, והאבר הראשון של 2 שזה מייצג את סוף הטווח והאבר הראשון של 3 שזה ה-id של הטווח, וכן הלאה וכן הלאה

                      הבנאי מחזיר מבנה נתונים מסוג ncls

                      עכשיו, נגיד שיש לך שתי רשימות של טווחים כאלו ואתה רוצה למצוא את כל הטווחים מרשימה א שחופפים טווחים מרשימה ב, תוכל ליצור מבנה ncls מרשימה א, ואז לקרוא למתודה all_overlaps_both של המבנה שהתקבל, תוך כדי שאתה מעביר לו את הרשימות שמייצגים את רשימה ב,

                      הערך שמוחזר הוא שני מערכים, ששניהם הם של ids, השמאלי הם מזהים מתוך רשימה א והימני מכיל מזהים מתוך רשימה ב וכל מיקום במערכים מייצג חפיפה בין הטווחים האלו (סליחה הניסוח שלי לא כל כך ברור, כלומר אם תיקח אבר [0] מתוך המערך הימני, ואבר [0] מתוך המערך השני, תקבל מזהה של טווח מתוך רשימה א ומזהה של טווח מתוך רשימה ב שחופפים אחד את השני, וכן הלאה, נמצאים שם כל הטווחים של שני הרשימות שחופפים)

                      מקווה שזה ברור
                      היה חבל לי אחרי שהתאמצתי להבין שלא לשתף אותך בתובנות
                      לא רוצה לאפשר ל-AI טפשי לגרום שכל העמל שלי היה לריק :smile:

                      עד כאן החלק של הבנת הקוד, עכשיו לתרגם את זה ל-JS יכול להיות קשה אם תצטרך לממש מבנה נתונים זה לבד...

                      📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                      D תגובה 1 תגובה אחרונה
                      5
                      • D מנותק
                        D מנותק
                        davidnead
                        השיב לyossiz ב נערך לאחרונה על ידי
                        #11

                        @yossiz שוב תודה, ותודה על הטירחה להסביר.
                        אני חושב שהתקדמתי, הבנתי את הרעיון הכללי וכן את הAPI. מה שעדין לא ברור לי די הצורך הוא מה נחשב "חפיפה" ואיך בדיוק הפונקציה עובדת. כלומר היא משוה כל אחד מהטווחים ברשימה אחת לכל אחד מהטווחים ברשימה אחרת?
                        הנה דוגמה:

                            starts = np.array(([8, 5, 3]))
                            ends = np.array(([9, 7, 6]))
                            indexes = np.array(([21, 11, 10]))
                            ncls = NCLS(starts, ends, indexes.astype("int64"))
                            starts2 = np.array([1, 6])
                            ends2 = np.array([10, 7])
                            indexes2 = np.array([40, 41])
                            ncls.all_overlaps_both(starts2, ends2, indexes2.astype("int64"))
                        

                        הפלט של הדוגמה הזו הוא:

                        (array([40, 40, 40, 41]), array([10, 11, 21, 11]))
                        

                        כעת אני מנסה להבין. הטווחים של הרשימה הראשונה הם 8-9,5-7,3-6.
                        הטווחים של הרשימה השניה הם 1-10,6-7.
                        כל הטווחים של הרשימה הראשונה נכנסים לתוך הטווח של 1-10 (שהאינדקס שלו 40) של הרשימה השניה.
                        לעומת זאת רק הטווח האחרון של הרשימה השניה (6-7) נכנס בתוך 2 הטווחים הראשונים של הרשימה הראשונה (שהאינדקסים שלהם 10 ו11).
                        אז אם היית שואל אותי (שכנראה אין לי לא בינה מלאכותית וגם לא שאינה 😞 ) הייתי מציע פלט כזה:
                        40,40,40
                        21,11
                        חשבתי גם על אפשרויות נוספות לעשות את זה, אבל אף אחד מהם לא מתאימה לתוצאה הרצויה.
                        מה פיספסתי?

                        yossizY תגובה 1 תגובה אחרונה
                        0
                        • yossizY מנותק
                          yossizY מנותק
                          yossiz
                          השיב לdavidnead ב נערך לאחרונה על ידי yossiz
                          #12

                          @davidnead כתב בעזרה בהבנת קוד פייתון (NCLS):

                          כלומר היא משוה כל אחד מהטווחים ברשימה אחת לכל אחד מהטווחים ברשימה אחרת

                          כן (ברעיון, אולי בפועל יש דרך יותר יעילה)

                          הטווח האחרון של הרשימה השניה (6-7) נכנס בתוך 2 הטווחים הראשונים של הרשימה הראשונה

                          כנראה שפה טעית, המספר השני של טווח כנראה הוא עד ולא עד בכלל, לכן ל-6-7 יש חפיפה עם 5-7 אבל לא עם 3-6

                          הייתי מציע פלט כזה:
                          40,40,40
                          21,11

                          זה בכל מקרה לא יכול להיות נכון כי האורך של שני המערכים בפלט חייבים להיות זהות, כל אבר משני המערכים מסמל חפיפה בין השנים

                          📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                          D תגובה 1 תגובה אחרונה
                          0
                          • D מנותק
                            D מנותק
                            davidnead
                            השיב לyossiz ב נערך לאחרונה על ידי
                            #13

                            @yossiz אוקי עכשיו אני מבין מה בלבל אותי. שני המערכים בתוצאה אינם מייצגים איזו כפילות כלשהי, אלא כל חפיפה מופיעה פעם אחת בלבד בתוצאה, רק שששני האינדקסים מוצגים בשני המערכים איבר מקביל לאיבר. אתה אמרת את זה כבר בהתחלה אבל אני לא הבנתי.

                            כעת ברור יותר. יש סך הכל 4 חפיפות. 3 הטווחים של הרשימה הראשונה (ID 21,11,10) חופפים לטווח הראשון של הרשימה השניה (ID 40. כלומר 40,40,40). בנוסף, הטווח האמצעי של הרשימה הראשונה (ID 11) חופף את הטווח האחרון של הראשוימה השניה (ID41). וההשערה שלך לגבי עד ולא עד בכלל - בטלה.

                            הדבר האחרון שלא מובן זה הסדר של התוצאה. הייתי מצפה לסדר כזה:
                            40,40,40,41
                            21,11,10,11

                            במקום זה קיבלנו:
                            40,40,40,41
                            10,11,21,11
                            כך שהסדר בו מתבצעות הבדיקות (וממילא הבנה של התוצאות) אינו ברור דיו.

                            yossizY תגובה 1 תגובה אחרונה
                            1
                            • yossizY מנותק
                              yossizY מנותק
                              yossiz
                              השיב לdavidnead ב נערך לאחרונה על ידי yossiz
                              #14

                              @davidnead נראה לי שהסדר של התוצאה זה השלכה של צורת המימוש של מבנה הנתונים ואלגוריתם החיפוש, כרגע לא צללתי לעומק הדברים...

                              📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                              D 2 תגובות תגובה אחרונה
                              0
                              • D מנותק
                                D מנותק
                                davidnead
                                השיב לyossiz ב נערך לאחרונה על ידי
                                #15

                                @yossiz כתב בעזרה בהבנת קוד פייתון (NCLS):

                                @davidnead נראה לי שהסדר של התוצאה זה השלכה של צורת המימוש של מבנה הנתונים ואלגוריתם החיפוש, כרגע לא צללתי לעומק הדברים...

                                תודה! אין כמוך.

                                תגובה 1 תגובה אחרונה
                                0
                                • D מנותק
                                  D מנותק
                                  davidnead
                                  השיב לyossiz ב נערך לאחרונה על ידי
                                  #16

                                  @yossiz כתב בעזרה בהבנת קוד פייתון (NCLS):

                                  @davidnead נראה לי שהסדר של התוצאה זה השלכה של צורת המימוש של מבנה הנתונים ואלגוריתם החיפוש, כרגע לא צללתי לעומק הדברים...

                                  אז התברר שהסדר כן משנה לי, כך בקוד המקור שלי לפחות. גם אני חשבתי בהתחלה כמוך, אך לא סביר שהפלט הוא סדר אקראי של התוצאה שמוכתב מאופן המימוש. צריך להיות איזשהו הגיון בפלט המתקבל, לא רק בתוכן שלו אלא גם בסדר שלו.

                                  תגובה 1 תגובה אחרונה
                                  0

                                  בא תתחבר לדף היומי!
                                  • התחברות

                                  • אין לך חשבון עדיין? הרשמה

                                  • התחברו או הירשמו כדי לחפש.
                                  • פוסט ראשון
                                    פוסט אחרון
                                  0
                                  • דף הבית
                                  • קטגוריות
                                  • פוסטים אחרונים
                                  • משתמשים
                                  • חיפוש
                                  • חוקי הפורום