מה זה ליסט בדוט נט
-
אם הנמשל ממש זהה למשל, אני חושש שהדרך הנכונה והמעצבנת (כי זה מוריד את כל האתגר) זה הוא מסד נתונים.
זה לא באמת פיתרון, כי למסד יש אותו בעיה אבל מבחינה מעשית זה פשוט להיפטר מהמטלה...
הכי מהיר אני חושב זה טבלה ארוכה ואח"כ Distinct לטבלה אחרת.פורסם במקור בפורום CODE613 ב07/04/2014 16:34 (+03:00)
-
כעת סיימתי את הנסיון, תחילה הכנסתי את כל המילים לרשימה אחת ארוכה, אח''כ מיינתי ואח''כ הסרתי כפולים במקום 20 דקות זה הסתיים ב 40 שניות עבור המיון ועוד 7 שניות עבור הסרת איחוד הכפולים !!!
שתי שאלות:
כמה איברים יש?
איך הסרת כפולים?פורסם במקור בפורום CODE613 ב07/04/2014 16:57 (+03:00)
-
כעת הרצתי שוב וזה הדוח:
מספר פריטים 7,474,693
מיון 00:00:29.7094737
צירוף כפולים 00:00:04.0372530את הכפולים צירפתי בינהם [לא הסרתי] כך:
יצרתי ליסט חדש
עברתי בלולאה על כל הליסט הראשי
הכנסתי את האיבר לליסט החדש
בלולאה חדשה המשכתי להכניס את האיברים הבאים עד שהגיע איבר שונה
ואז המשכתי בלולאה של הליסט הראשיבליסט החדש נוצרו 611,496 פריטים.
פורסם במקור בפורום CODE613 ב07/04/2014 17:18 (+03:00)
-
המיון + האיחוד הוא לכאורה בזבוז, כי המיון הוא לא רק סורק, אלא גם ממקם, ובמקרה שלך היה עדיף שכבר יאחד בנקודת זמן זו.
השאלה איך לממש איחוד מהיר ללא מיון, הרי איחוד מחפש ובשביל חיפוש בינארי צריך מיון. התשובה היא שצריך רשימה חדשה למאוחדים (וזו רשימה הרבה יותר קצרה, ממילא המיון שלה זול יותר) שהיא תהיה ברת חיפוש מהיר כמו רשימה ממויינת.
אבל, אף שאינני מבין איך, Dictionary מוצא מהר יותר מחיפוש בינארי. וממילא עדיף Dictionary.לפי מה שנראה לי, Dictionary מהתחלה יעשה את העבודה מהר יותר.
אם תמשיך בקו שלך, אז יש לי שיפור:
הפירוש שבמשל הוא המערך השלמים שבנמשל. כמה פירושים = כמה מערכים. במקור יש רק פירוש לכל מילה, אז עדיף שתעבוד עם אובייקט שונה שמכיל במקום ליסט משתנה שלם פשוט (זה חיסכון גם בזיכרון וגם במעבד). ובאובייקט היעד (המאוחד) יהיה מערך ולא ליסט (חיסכון בזיכרון).פורסם במקור בפורום CODE613 ב07/04/2014 19:24 (+03:00)
-
@דוד ל.ט.
השאלה איך לממש איחוד מהיר ללא מיון, הרי איחוד מחפש ובשביל חיפוש בינארי צריך מיון.
מה שאני עשיתי זה שקודם מיינתי ואז לא הייתי צריך לחפש כדי לאחד את הכפולים, כי אחרי מיון כל הכפולים עומדים אחד אחרי השני ברצף. אם לא נמיין וכדי לאחד נחפש הרי שנצטרך לעשות המון חיפושים חיפוש לכל פריט. אבל המיון הוא יותר מהיר מזה, ואחרי המיון האיחוד הוא ב 4 שניות.
@דוד ל.ט.ובאובייקט היעד (המאוחד) יהיה מערך ולא ליסט (חיסכון בזיכרון).
גם אני נוכחתי לראות שמערך לוקח פחות זכרון מאשר ליסט אבל למה זה? הרי גם הליסט מבוסס על מערך?
פורסם במקור בפורום CODE613 ב07/04/2014 20:33 (+03:00)
-
שוב, לדעתי המיון מיותר. מתשובתך ניכר שנמאס לך לעיין בנושא...
בקשר לליסט מול מערך זה מאוד פשוט, מערך לוקח בדיוק את הגדול שהוא תופס, וליסט תופס מראש מקומות לאפשר הוספה.
עוד שיפור (גם בדרכך שלך) זה לעשות את המחלקה לטרום האיחוד כמבנה.פורסם במקור בפורום CODE613 ב08/04/2014 11:19 (+03:00)
-
לא נמאס לי לעיין...
לא הבנתי למה המיון מיותר איך אפשר לעשות את זה יותר מהר?
@דוד ל.ט.בקשר לליסט מול מערך זה מאוד פשוט, מערך לוקח בדיוק את הגדול שהוא תופס, וליסט תופס מראש מקומות לאפשר הוספה.
ההבדל בין ליסט למערך הוא פי כמה למשל בקוד הבא המערך הוסיף לתוכנה 3 מגה והליסט 7 מגה
Dim arr(700000) As Integer For i = 0 To 700000 arr(i) = i Next Dim list As New List(Of Integer) For i = 0 To 700000 list.Add(i) Next
אם זה רק כדי לתפוס מקום מראש זה לא היה אמור להיות כזה הבדל.
פורסם במקור בפורום CODE613 ב08/04/2014 11:50 (+03:00)
-
האמת טעיתי באשכול
התכוונתי לזה
http://tchumim.com/topic/120פורסם במקור בפורום CODE613 ב31/08/2015 23:04 (+03:00)
-
-
דוד ורחמים, שניכם בעצם מדברים על נושאים שהוא הוא ליבת העניין של פיתוח מסד נתונים, האומנם??? אם משהו לוקח לך 20 דקות כדי לבדוק אם קיים במערך, תאמין לי שכבר רבים וטובים עשו את זה לפניך, לתוכנה הזו קורים "דטה בייס" ויש כמה סוגים. יש אלגוריתמי על שמפותחים כל הזמן ומושקעים מאות מיליונים בשביל מטרות אלו על ידי ענקיות הטכנולוגיה.
עבור טיפול בכמות המידע שאתה מדבר הייתי ממליץ לך ללכת על מסד נתונים כלשהו, מבוסס דיסק קשיח או מבוסס ממורי (יש כמה, ולמשל ב mysql אפשר לבנות טבלאות שלמות מבוססות ממורי) והם עושים את העבודה מצויין!!! למה להמציא את הגלגל כשאפשר להמציא את העגלה?זאת המלצה אישית מההיבט של חוק הכלכול, אלא אם כן שעשועי אקדמיה בדיונכם ואז אני מבטל את דברי.
פורסם במקור בפורום CODE613 ב01/09/2015 01:00 (+03:00)
-
כאן מדובר על מנוע חיפוש לא מתאים לזה דטה-בייס בשום אופן
וברוך ה' מנוע החיפוש עובד מצויין ומהר מאוד, לדוגמא חיפוש של שתי מילים, עם מרחק 30 בינהם, בכל מאגר היברובוקס שיש בו 52 אלף ספרים [530 גיגה] לוקח קצת יותר משניה.פורסם במקור בפורום CODE613 ב01/09/2015 10:05 (+03:00)
-
כאן מדובר על מנוע חיפוש לא מתאים לזה דטה-בייס בשום אופן
תמיהתי גוברת בכפליים, הרי כבר אמרו לא איברי דטה בייס אלא לחיפושיא...
@רחמיםחיפוש של שתי מילים, עם מרחק 30 בינהם, בכל מאגר היברובוקס שיש בו 52 אלף ספרים [530 גיגה] לוקח קצת יותר משניה.
אתה יודע איך החיפוש של היברו בוקס עובד??? אז מה הם בעצם פיתחו דטה בייס או מה??? דווקא זה מעניין אותי מאוד, איך עובד החיפוש בהיברובוקס?
פורסם במקור בפורום CODE613 ב01/09/2015 10:37 (+03:00)
-
תמיהתי גוברת בכפליים, הרי כבר אמרו לא איברי דטה בייס אלא לחיפושיא...
לא שייך פשוט לא שייך, מנוע חיפוש צריך לתמוך במגוון רחב של חיפושים שאין אותם בדטה ביס ומאידך גיסא דטה ביס עושה המון דברים שמנוע חיפוש לא צריך אותם
אתה יודע איך החיפוש של היברו בוקס עובד??? אז מה הם בעצם פיתחו דטה בייס או מה??? דווקא זה מעניין אותי מאוד, איך עובד החיפוש בהיברובוקס?
היברובוקס עובד עם מנוע חיפוש לא עם דטה ביס.
פורסם במקור בפורום CODE613 ב01/09/2015 10:45 (+03:00)
-
תראה, אין שום סיכוי שמנוע החיפוש של היברו בוקס עובר בשניה אחת על כל החומר נקודה. אלא אם כן זה מבוזר על מאה אלף שרתים, וכל אחד מהם מכיל כמה עשרות ספרים בלבד.
מנוע חיפוש שאיננו מבוסס על דטה בייס, זה בעצם כמו לפתח דטה בייס, מה שאני יודע זה שגוגל ושאר החברות עושות אינדקסים בעצמם, ויש משהו כמו מאתיים שאילתות שרצות ברקע.
דבר ראשון הם מציפים קודם כל את התוצאות בצורה "גסה" (את זה למשל אתה יכול לעשות בקלות באמצעות דטה בייס, שמחפש מילים בלבד) ולאחר מכן מריצים אלגוריתמים "חכמים" יותר על התוצאות שהם כבר לא מיליארדים אלא כמה מאות.
דבר שני יש להם אינדקסים שונים ומשונים שמתאימים ביטויים נפוצים למילים אחרות, כמו למשל "ירושליים=ירושלים" מילים נרדפות וכן הלאה, כלומר הם מחזיקים ברקע מילונים שהם בעצמם מאונדקסים על מנת לשלוף מתוך מיליארדי הרשומות שלהם את מה שמתאים. אבל אין שום סיכוי שאלגוריתם כלשהו עובר על מיליארדי רשומות כאשר אתה עושה חיפוש, הוא עובד ברקע זה כן, אבל את התוצאות שלו הוא דוחף לתוך אוסף גס שבגסים שהוא באמת מסוגל לשלוף לך בשברירי שניה מידע רלוונטי.
לפי מה שגוגל מפרסמת יש להם למעלה מ 200 שאילתות שרצות בכל חיפוש שמישהו מבצע.פורסם במקור בפורום CODE613 ב01/09/2015 15:49 (+03:00)