ABA


"שאלה בנוגע לסיבוכית זמן ריצה,"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #10558 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 10558
dvir8
חבר מתאריך 13.5.02
5929 הודעות
   09:52   05.01.12   
אל הפורום  
  שאלה בנוגע לסיבוכית זמן ריצה,  
 
   אך לפני כן! בבקשה אל תגידו לי את התשובה ואיך לעשות אני רק צריך לדעת בכללי אם זה נכון.

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

מבחינת יעילות מה עדיף? למיין את המערך קודם ואז לחפש? כלומר אם אני ממין את המערך אז מבחינת סיבוכית זה יוצא n בריבוע נכון? ואז לחפש את המספר בצורה בינארית זה logn ככה מבצעים את החישוב? זה יוצא logn+n^2?

ואם אני ישר מתחיל לחפש זה יוצא n^2 בלבד? במידה ואני מחפש בצורה ליניארית?
אגב אילו שיטות חיפוש נוספות יש על מערך לא ממוין?


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  אני ממליץ לך בפעם הבאה שאתה פותח שאלה כזאת Net_Boy  05.01.12 11:06 1
     תודה רבה לך! ומצטער על האי-סדר, dvir8 05.01.12 14:24 2
     בלי להכנס לפרטים, נראה לי קשה לפתור את זה ב-O(n( Deuce  06.01.12 00:25 4
         קשה? למה? -ספוילר! לא לקרוא אם אתה רוצה לפתור לבד!- Zippo  06.01.12 02:02 7
             בתוחלת .. :) Deuce  06.01.12 15:12 8
                 יש גם פתרונות לא הסתברותיים. Zippo  08.01.12 01:06 13
                     היי בעיקרון הדגש על סיבוכיות זמן ריצה, dvir8 08.01.12 09:41 14
                         אם אין הגבלת מקום בכלל, אתה יכול לבצע את הדבר הבא: Zippo  08.01.12 12:30 18
         הוא לא רשם שיש הגבלה של זכרון ולכן, אני יוצא מנקודת Net_Boy  06.01.12 21:04 9
     מממממ cfirzzz 14.01.12 21:25 34
     רק הגרסא הדטרמיניסטית של מיון מהיר רצה בnlogn ShocKi  14.01.12 22:59 36
  תלוי מה אתה מחפש VeNom  05.01.12 23:01 3
     אין שום הגבלה על הקלט Deuce  06.01.12 00:26 5
         לא שמתי לב שלא מדובר באותיות VeNom  06.01.12 00:39 6
  אם אתה רוצה אחי אני יכול לשלח לך ספר של האוניברסיטה הפת kutumaster  06.01.12 22:48 10
     תודה רבה לך אחי, אבל בעיקרון אני לא צריך ברמה כזאת, dvir8 07.01.12 18:02 11
         pdf kutumaster  08.01.12 11:24 17
  חברים עוד לא קראתי תתגובות שלכם כי חלקם מכילות תשובות, dvir8 07.01.12 21:13 12
  השאלה במלואה, dvir8 08.01.12 09:43 15
     אם היית יודע משהו על הקלט לא היית חייב למיין את המערך TheKid 08.01.12 09:59 16
         אין לי מושג מה זה hash table כנראה שלא למדנו את זה, dvir8 08.01.12 15:19 19
             איזה מיונים למדת? TheKid 08.01.12 15:50 20
             חסם תחתון על מיונים מבוססי השוואה הוא nlogn Zippo  08.01.12 17:08 21
                 האם השיטה בתגובה 18 תעבוד אם יהיו גם מספרים שליליים? TheKid 08.01.12 17:25 22
                     אין שום סיבה שלא. Zippo  08.01.12 18:08 23
                         נראה לי פתרון מסובך מדי ולא מקצועי כל כך TheKid 08.01.12 18:52 24
                             לא הבנת אותי. Zippo  08.01.12 19:42 25
                                 תודה על התגובות שלך, אני חושב שהידע ששיתפת פה dvir8 09.01.12 00:22 26
                                     לא בהכרח. Zippo  09.01.12 07:17 27
                                     התשובה לשאלה שלך היא -לא TheKid 09.01.12 07:36 28
                                         למדנו ככה, dvir8 09.01.12 21:12 29
                                             עדכון, dvir8 10.01.12 08:45 30
                                                 אם אתה סגור על מיון Zippo  10.01.12 22:51 31
                                                     תודה על ההשקעה יא גבר, אבל אסור לנו מה שלא למדנו, dvir8 11.01.12 17:44 32
                                                         כן cfirzzz 14.01.12 21:30 35
                                                 הוא כנראה אומר לכם את זה כי למיון מהיר יש 3 מימושים ShocKi  14.01.12 23:05 37
                                                     הדטרמיניסטית רצה במקרה הגרוע ב nlogn cfirzzz 15.01.12 06:43 38
                                                         כן, זה מה שהתכוונתי ShocKi  15.01.12 15:54 39
         זה כמעט נכון cfirzzz 14.01.12 21:24 33
  איזה הענות יש בפורום...תודה לכולם הגשתי את העבודה :] dvir8 17.01.12 09:12 40

       
Net_Boy  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.4.02
17151 הודעות, 1 פידבק
   11:06   05.01.12   
אל הפורום  
  1. אני ממליץ לך בפעם הבאה שאתה פותח שאלה כזאת  
בתגובה להודעה מספר 0
 
   לרשום את הרקע ואז לנסח את השאלות בצורה מספרית.
כי שאלת פה המון שאלות ומי שיקרא את זה לא יענה לך על כולן כי הן לא כתובות בצורה מסודרת.

לשאלתך,

- מה עדיף?
במקרה הזה אפשר לעשות את האלגוריתם ב O(n), היות והחסם התחתון של חיפוש הוא O(n log n לא כדאי למיין.

- אם אני ממין את המערך אז מבחינת סיבוכית זה יוצא n בריבוע נכון?
לא בהכרח, חיפוש יכול להיות n log n (לדוגמא Quick sort או merge sort)

- אז לחפש את המספר בצורה בינארית זה logn ככה מבצעים את החישוב? זה יוצא logn+n^2?

אם כבר מיינת את המערך, אתה רק צריך לסרוק האם יש לו איבר כפול, סריקה כזאת היא O(n) ולכן היעילות הסופית שלך תהיה O(nlogn) + O(n) שזה מסדר גודל של O(nlogn)

אני אתן לך רמז,
אתה לא צריך לעשות פי מיון של המערך.
אם תרצה עוד רמז תגיד לי ואני אכוון אותך יותר


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dvir8
חבר מתאריך 13.5.02
5929 הודעות
   14:24   05.01.12   
אל הפורום  
  2. תודה רבה לך! ומצטער על האי-סדר,  
בתגובה להודעה מספר 1
 
   אני אנסה במידה ולא אסתדר אפנה שוב :]


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   00:25   06.01.12   
אל הפורום  
  4. בלי להכנס לפרטים, נראה לי קשה לפתור את זה ב-O(n(  
בתגובה להודעה מספר 1
 
אתה בטוח שבלי שום הגבלות על הקלט אתה יכול לפתור את זה ב-O(n(? מהסתכלות ראשונית, נשמע לי שזה קשה.






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Zippo 
חבר מתאריך 26.5.02
7921 הודעות
   02:02   06.01.12   
אל הפורום  
  7. קשה? למה? -ספוילר! לא לקרוא אם אתה רוצה לפתור לבד!-  
בתגובה להודעה מספר 4
 
מעבר איבר-איבר והכנסה לטבלת האש => זמן ליניארי, ואם יש התנגשות בודקים אם זה אותו איבר. אם אתה דואג בקשר לקלט של "יריב זדוני" אפשר להשתמש באלגוריתם של בניית האש מושלם של FKS, שזמן הבנייה הוא ליניארי בתוחלת.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   15:12   06.01.12   
אל הפורום  
  8. בתוחלת .. :)  
בתגובה להודעה מספר 7
 
זה פתרון מאד פרקטי, אולי הכי פרקטי שיש, להשתמש ב-Hash רגיל דוגמת sha1 או md5 ואם יש התנגשויות אז לבצע בדיקות פנימיות. כאשר אתה מנתח את זה באופן תאורטי, אתה צריך לקחת בחשבון "יריב זדוני", כפי שאמרת, ולהשתמש למשל באלגוריתם של FKS.
אולם בפועל יש כמה פקטורים שקשה להתעלם מהם:
תחזוקת משפחה של Hash Functions - זה מעט בעייתי כאשר טווח המספרים גדול בהרבה מכמות המספרים (נניח שיש לנו n מספרים במערך שמתפלגים על [0,n^3]). את זה אפשר לפתור עם הגרלת פונקציה של Carter and Wegman.
זה יוצא בתוחלת O(n(.
הכל מאד הסתברותי והחישובים לוקחים גם יחסית הרבה זמן (מודולו p למשל). בסופו של דבר זה עניין של כימות. אם מחפשים סיבוכיות w.c אז כנראה ש-hash הוא לא הפתרון. אם מחפשים מהירות פרקטית, יכול להיות שהפעלת md5 מובנה בשפה תהיה המהירה מכולן. אם בכל זאת מתעקשים על כתיבה של אלגוריתם משלך, אני בספק ש-FKS יהיה מהיר יותר מלמיין בעזרת quick sort.

בכל מקרה, זה לא באמת פותר את הבעיה של W.C.






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Zippo 
חבר מתאריך 26.5.02
7921 הודעות
   01:06   08.01.12   
אל הפורום  
  13. יש גם פתרונות לא הסתברותיים.  
בתגובה להודעה מספר 8
 
אפשר במעבר אחד בזמן n לעבור על כל האיברים ולמצוא מינימום ומקסימום.
ואז להתייחס אל האיברים במערך כאל בעיית המילון כאשר U הוא בעצם טווח המספרים מהמינימום למקסימום, ואז בעזרת פתרון כמו y-fast-trie אפשר לפתור בזמן n*loglogU אפשר לחשב מראש מה יותר טוב. loglogU או logn...
בכל מקרה, אם אין הגבלת זיכרון, לא צריך האש. אפשר מראש לבצע אלוקציה של מערך בגודל U, ופשוט על כל איבר x במערך הקלט, להכניס 1 ל- [U[x. אם בשלב מסוים רצית להכניס 1 לתא שכבר מכיל 1, סימן שזה איבר שהופיע פעמיים...
אבל זה פתרון מאד בזבזני בזיכרון...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dvir8
חבר מתאריך 13.5.02
5929 הודעות
   09:41   08.01.12   
אל הפורום  
  14. היי בעיקרון הדגש על סיבוכיות זמן ריצה,  
בתגובה להודעה מספר 13
 
   לגבי Hash לא למדנו את זה (כי אין לי מושג מה זה אומר).
מה שלמדנו עד כה, זה סוגי חיפוש לא ממוין, מיון מערך, וחיפוש בתוך מערך ממוין.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Zippo 
חבר מתאריך 26.5.02
7921 הודעות
   12:30   08.01.12   
אל הפורום  
  18. אם אין הגבלת מקום בכלל, אתה יכול לבצע את הדבר הבא:  
בתגובה להודעה מספר 14
 
, נניח שקיבלת מערך שמכיל את סדרת המספרים:
2,7,1,18,0,2,20,10
רק 8 איברים.
אתה יכול במעבר אחד על המערך לגלות מה המינימום (0), ומה המקסימום (20).
אז תוכל להקצות מערך בגודל 21 תאים. (בוליאני)
כאשר בתא ה-i
אתה תשמור TRUE אם מצאת איבר שערכו i+min
כאשר min הוא הערך המינימלי.
בדוגמא הזאת הקצאנו 21 תאים על 8 איברים.
נעבור איבר איבר:


|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|

האיבר הראשון הוא 2, ולכן:

|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|+|_|_|

האיבר השני הוא 7, ולכן:

|_|_|_|_|_|_|_|_|_|_|_|_|+|_|_|_|_|+|_|_|

האיבר השלישי הוא 1, ולכן:

|_|_|_|_|_|_|_|_|_|_|_|_|+|_|_|_|_|+|+|_|

האיבר הרביעי הוא 18, ולכן:

|_|_|+|_|_|_|_|_|_|_|_|_|+|_|_|_|_|+|+|_|

האיבר החמישי הוא 0, ולכן:

|_|_|+|_|_|_|_|_|_|_|_|_|+|_|_|_|_|+|+|+|

האיבר השישי הוא 2, אבל (A(2 כבר מכיל "+", ולכן נחזיר שיש איבר כפול בסדרה.
וכל זה לקח זמן ליניארי.
למה אני לא אוהב את הפתרון הזה, והצעתי hash?
פשוט מהסיבה שאפשר לקבל סדרה כזאת:
1,10000000,100000000000000000000000
למשל...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Net_Boy  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.4.02
17151 הודעות, 1 פידבק
   21:04   06.01.12   
אל הפורום  
  9. הוא לא רשם שיש הגבלה של זכרון ולכן, אני יוצא מנקודת  
בתגובה להודעה מספר 4
 
   הנחה שאפשר עם האש כמו ש zippo הציע.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
cfirzzz לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.8.02
5060 הודעות, 2 פידבק
   21:25   14.01.12   
אל הפורום  
  34. מממממ  
בתגובה להודעה מספר 1
 
   אני חושב שפספסת משהו בשאלה
לא ידוע לך מראש המספר אותו רוצים לבדוק
לכן אתה לא תוכל לבצע את זה ב O(n אלא רק ב nlogn.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ShocKi  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 19.3.02
20171 הודעות, 10 פידבק
   22:59   14.01.12   
אל הפורום  
  36. רק הגרסא הדטרמיניסטית של מיון מהיר רצה בnlogn  
בתגובה להודעה מספר 1
 
   במקרה הגרוע


קאש-באק ישראלי: https://www.cashback.co.il/?uref=33330
קאשבק לAsos ואמזון דרך Ebates: https://goo.gl/MX87Y7 - מקבלים 10$ לאחר שימוש ראשון.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
VeNom  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 7.6.02
7922 הודעות, 1 פידבק
   23:01   05.01.12   
אל הפורום  
  3. תלוי מה אתה מחפש  
בתגובה להודעה מספר 0
 
   אם אתה מחפש יעילות של זמן אז וריאציה של Bucket sort תתן לך זמן ריצה לינארי וזכרון לינארי.
אם אתה מחפש יעילות של זכרון אז מיון שיעלה לך לפחות nlogn...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   00:26   06.01.12   
אל הפורום  
  5. אין שום הגבלה על הקלט  
בתגובה להודעה מספר 3
 
Bucket Sort בלי שום הגבלה יכול לקחת n^2 בנקל.






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
VeNom  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 7.6.02
7922 הודעות, 1 פידבק
   00:39   06.01.12   
אל הפורום  
  6. לא שמתי לב שלא מדובר באותיות  
בתגובה להודעה מספר 5
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
kutumaster 
חבר מתאריך 19.9.06
19325 הודעות
   22:48   06.01.12   
אל הפורום  
  10. אם אתה רוצה אחי אני יכול לשלח לך ספר של האוניברסיטה הפת  
בתגובה להודעה מספר 0
 
   הפתוחה על אלגוריתמים וזמני ריצה ועוד חומר אקדמי

בברכה,


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dvir8
חבר מתאריך 13.5.02
5929 הודעות
   18:02   07.01.12   
אל הפורום  
  11. תודה רבה לך אחי, אבל בעיקרון אני לא צריך ברמה כזאת,  
בתגובה להודעה מספר 10
 
   אנחנו רק נוגעים בזה כחלק מוקרס ג'אוה.
סמסטר הבאה אני אעשה אלגוריתמים :]

אגב באיזה פורמט יש לך את הספר?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
kutumaster 
חבר מתאריך 19.9.06
19325 הודעות
   11:24   08.01.12   
אל הפורום  
  17. pdf  
בתגובה להודעה מספר 11
 
  

בברכה,


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dvir8
חבר מתאריך 13.5.02
5929 הודעות
   21:13   07.01.12   
אל הפורום  
  12. חברים עוד לא קראתי תתגובות שלכם כי חלקם מכילות תשובות,  
בתגובה להודעה מספר 0
 
   אבל אני אגיב מחר. תודה על התגובות!


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dvir8
חבר מתאריך 13.5.02
5929 הודעות
   09:43   08.01.12   
אל הפורום  
  15. השאלה במלואה,  
בתגובה להודעה מספר 0
 
   כתבו שיטה (public boolean single(int values המקבלת מערך
values מלא במספרים, ומחזירה true אם קיים במערך איבר המופיע פעם אחת בלבד
במערך, ו-false אחרת.
למשל, עבור המערך {3, 1, 4, 1, 4, 1} השיטה תחזיר true כיוון ש-3 מופיע פעם אחת בלבד,
ואילו עבור המערך {3, 1, 4, 1, 4, 3} השיטה תחזיר false כיוון שאין איבר שמופיע רק פעם
אחת.

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
TheKid לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 5.10.07
17978 הודעות, 1 פידבק
   09:59   08.01.12   
אל הפורום  
  16. אם היית יודע משהו על הקלט לא היית חייב למיין את המערך  
בתגובה להודעה מספר 15
 
   בוודאות.. כלומר אם היו אומרים לך למשל שהערכים הם חיוביים ויכולים להיות מ1 עד N
היית בונה מערך מונים וסיבוכיות הריצה הסופית היתה O(N) מכיוון שאתה לא יודע דבר על הקלט
הייתי משתמש בhash table כאשר הkey הוא המספר והvalue הוא כמות ההופעות שלו כך שבסוף המעבר על המערך המקורי הייתי מחפש את הערך 1 בטבלת הhash ככה שהיה יוצא o(n)


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dvir8
חבר מתאריך 13.5.02
5929 הודעות
   15:19   08.01.12   
אל הפורום  
  19. אין לי מושג מה זה hash table כנראה שלא למדנו את זה,  
בתגובה להודעה מספר 16
 
   וזה לא בחומר. במידה ואני לא אמור להשתמש בהאש, מה הדרך הנכונה? למיין קודם ואז לחפש?

מה המיון הכי טוב שאני יכול לעשות מבחינת סיבוכיות ריצה? ואיזה סוג מיון זה?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
TheKid לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 5.10.07
17978 הודעות, 1 פידבק
   15:50   08.01.12   
אל הפורום  
  20. איזה מיונים למדת?  
בתגובה להודעה מספר 19
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Zippo 
חבר מתאריך 26.5.02
7921 הודעות
   17:08   08.01.12   
אל הפורום  
  21. חסם תחתון על מיונים מבוססי השוואה הוא nlogn  
בתגובה להודעה מספר 19
 
יש המון מיונים.
מיון הכנסה, מיון בועות והגרסא הנאיבית של מיון מהיר, רצים ב-n^2.
בנוגע למיון מהיר, הזמן הממוצע הוא עדיין nlogn, ואם משווים ממוצע עד כדי קבוע, הוא המיון המהיר ביותר שיש, אפילו בהשוואה למיונים שבמקרה הגרוע גם רצים ב- nlogn

מיון ערימה, מיון מיזוג, ומיון מהיר עם בחירת הפיבוט כחציון החציונים, רצים כולם במקרה הגרוע ב- nlogn

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

that's being said
אתה לא בהכרח צריך למיין...
ראה תגובה 18.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
TheKid לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 5.10.07
17978 הודעות, 1 פידבק
   17:25   08.01.12   
אל הפורום  
  22. האם השיטה בתגובה 18 תעבוד אם יהיו גם מספרים שליליים?  
בתגובה להודעה מספר 21
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Zippo 
חבר מתאריך 26.5.02
7921 הודעות
   18:08   08.01.12   
אל הפורום  
  23. אין שום סיבה שלא.  
בתגובה להודעה מספר 22
 
רק תשים לב שזה יכול להיות לא יעיל בעליל מבחינת סיבוכיות זיכרון אם ההפרש בין המינימום למקסימום גדול בסדר גודל ממספר האיברים.
אפשר כמובן לבצע אופטימיזציה.

1- עבור על המערך למציאת מינימום ומקסימום (O(n
2- אם nlogn > max-min,(אפשר להחליט מהי סיבוכיות זיכרון סבירה ולשאול עבור n^2 במקום nlogn למשל) בצע את הפיתרון מתגובה 18. אחרת, מיין את המערך.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
TheKid לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 5.10.07
17978 הודעות, 1 פידבק
   18:52   08.01.12   
אל הפורום  
  24. נראה לי פתרון מסובך מדי ולא מקצועי כל כך  
בתגובה להודעה מספר 23
 
   ערכתי לאחרונה בתאריך 08.01.12 בשעה 18:58 בברכה, TheKid
 
אבל זה דעה אישית... (אני מתכוון מבחינת ממוצע הקלטים הסבירים)
מספיק שיהיו לך שני איברים מינוס אלף ואלף.. כדי שהפתרון שלך לא יהיה יעיל..
במקום 4 פעולות אתה בעצם תעשה מעל 2000 מעברים על המערך...
אלא אם כן אני לא מבין את הכוונה שלך כי הצלחת לבלבל אותי ב"ייעול" שעשית בהודעה האחרונה...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Zippo 
חבר מתאריך 26.5.02
7921 הודעות
   19:42   08.01.12   
אל הפורום  
  25. לא הבנת אותי.  
בתגובה להודעה מספר 24
 
יש מערך עם שני איברים, 1000-,1000
1- חשב max-min => תקבל 2000
2- עכשיו תחליט אם אתה רוצה להקצות 2000 איברים או למיין 2.
3- גם אם החלטת להקצות 2000 איברים, הקצאה זה הזזה של פוינטר => כלומר (O(1
4- נניח שיש לך עכשיו מערך בשם A, עם 2000 איברים. אז:


for each x <- input:
if A[x-(-1000)] == true
return "there are duplicates"
else
A[x-(-1000)] = true

מכיון שיש לך רק 2 איברים בקלט, 1000, ו: 1000-
הלולאה תרוץ רק פעמיים...
חוסר היעילות של ה"אופטימיזציה" שהצעתי, זה רק לצורך זיכרון.
מבחינת זמן ריצה זה תמיד יהיה (O(n

מקווה שעכשיו זה ברור...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dvir8
חבר מתאריך 13.5.02
5929 הודעות
   00:22   09.01.12   
אל הפורום  
  26. תודה על התגובות שלך, אני חושב שהידע ששיתפת פה  
בתגובה להודעה מספר 25
 
   הוא הרבה מעבר למה שאני צריך. אבל בכל מקרה אני מניח שאני אמור למיין את זה בעזרת quicksort ואז בטח לרוץ על המערך בצורה בינארית

מבחינת סיבוכיות ריצה זה יוצא הכי משתלם במקרה הגרוע נכון?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Zippo 
חבר מתאריך 26.5.02
7921 הודעות
   07:17   09.01.12   
אל הפורום  
  27. לא בהכרח.  
בתגובה להודעה מספר 26
 
ובוודאי שלא במקרה הממוצע.
אגב, קוויקסורט הוא לא הכי טוב במקרה הגרוע. הוא המיון הכי טוב במקרה הממוצע. (אלא אם כן, אתה משתמש באלגוריתם select לבחירת חציון החציונים כ-pivot בכל צעד ברקורסיה - אבל אז ה-overhead כבר גדול מדי, ואומנם המקרה הגרוע יקח עדיין nlogn, אבל בשביל המקרה הממוצע כבר עדיף מיון מיזוג... שהוא הרבה יותר פשוט, ויותר משתלם עד כדי קבוע כלשהוא.)

שוב, במעבר אחד על המערך, אתה מקבל מידע מאד שימושי.
1- טווח המספרים. (מינימום עד מקסימום)
2- כמות המספרים.

עם המידע הזה, אתה יכול לעשות דברים חכמים יותר מאשר למיין בצורה עיוורת.
מיון זה "תותחים כבדים" שלא בהכרח צריך...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
TheKid לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 5.10.07
17978 הודעות, 1 פידבק
   07:36   09.01.12   
אל הפורום  
  28. התשובה לשאלה שלך היא -לא  
בתגובה להודעה מספר 26
 
   וקשה לענות לך בלי שתפרט מה למדת. (איזה מיונים ואיזה חיפושים)
quick sort דווקא הכי גרוע במקרה הגרוע...n^2


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dvir8
חבר מתאריך 13.5.02
5929 הודעות
   21:12   09.01.12   
אל הפורום  
  29. למדנו ככה,  
בתגובה להודעה מספר 28
 
   חיפוש ליניארי

מיון בועות,בחירה,הכנסה
מיון מהיר (quicksort)

חיפוש בינארי במערך ממוין

זה הכל


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dvir8
חבר מתאריך 13.5.02
5929 הודעות
   08:45   10.01.12   
אל הפורום  
  30. עדכון,  
בתגובה להודעה מספר 29
 
   אחד המנחים אמר בפורום שלמיון מהיר יתיחסו כזמן ממוצע ולא למקרה הגרוע.
אז אני מניח שהם רוצים שנשתמש בזה נכון?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Zippo 
חבר מתאריך 26.5.02
7921 הודעות
   22:51   10.01.12   
אל הפורום  
  31. אם אתה סגור על מיון  
בתגובה להודעה מספר 30
 
ואתה שואל אותי,
לך על מיון מיזוג.
הרבה יותר פשוט למימוש.
ורץ ב- nlogn במקרה הגרוע גם...
פסאודו קוד (מפורט!) כי אמרת שלא למדתם:


mergesort(A,start,end){
____if((end - start) == 1) {
________rv = new Array[1];
________rv[0] = A[start];
____}
____else if((end - start) == 0) {
________rv = null;
____}
____else {
________rv = merge(mergesort(A,start,floor((start+end)/2)),mergesort(A,ceiling((start+end)/2),end));
____}
____return rv;
}
.
.
.
merge(A,B) {
____i = ia = ib = 0;
____C = new Array[A.size() + B.size()];
____while((ia < A.size()) && (ib < B.size())) {
________if(A[ia] < B[ib]) {
____________C[i] = A[ia];
____________ia++;
________}
________else {
____________C[i] = B[ib];
____________ib++;
________}
________i++;
____}
____return concat(C,&A[ia],&B[ib]);
}


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dvir8
חבר מתאריך 13.5.02
5929 הודעות
   17:44   11.01.12   
אל הפורום  
  32. תודה על ההשקעה יא גבר, אבל אסור לנו מה שלא למדנו,  
בתגובה להודעה מספר 31
 
   אז אני מניח שהם רוצים שנשתמש במיון מהיר בגלל זה קפצתי ישר להגיד את זה.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
cfirzzz לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.8.02
5060 הודעות, 2 פידבק
   21:30   14.01.12   
אל הפורום  
  35. כן  
בתגובה להודעה מספר 32
 
   אתה תצטרך להשתמש ב quick sort.
לא יודע למה הוא אמר לכם שזה במקרה הממוצע, quick sort הוא nlogn במקרה הגרוע (O של...).
אחרי זה תצטרך לבצע מעבר על המערך כולו ב O(n אבל זה נכנס בחישוב הסיבוכיות של המיון.
לא תוכל לבצע חיפוש בינארי מהסיבה שהוא לא ייתן לך כלום, אתה לא יודע איזה איבר אתה מחפש.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ShocKi  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 19.3.02
20171 הודעות, 10 פידבק
   23:05   14.01.12   
אל הפורום  
  37. הוא כנראה אומר לכם את זה כי למיון מהיר יש 3 מימושים  
בתגובה להודעה מספר 30
 
   בסיסית, אקראית ודטרמיניסית.

אני מניח שאתם ראיתם את המיון הבסיסי.. שכאמור במקרה הגרוע רץ ב O(n^2), כך גם הגרסא האקראית.

אולם הגרסא הדטרמיניסטית רצה במקרה הגרוע ב O(n^2).


קאש-באק ישראלי: https://www.cashback.co.il/?uref=33330
קאשבק לAsos ואמזון דרך Ebates: https://goo.gl/MX87Y7 - מקבלים 10$ לאחר שימוש ראשון.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
cfirzzz לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.8.02
5060 הודעות, 2 פידבק
   06:43   15.01.12   
אל הפורום  
  38. הדטרמיניסטית רצה במקרה הגרוע ב nlogn  
בתגובה להודעה מספר 37
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ShocKi  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 19.3.02
20171 הודעות, 10 פידבק
   15:54   15.01.12   
אל הפורום  
  39. כן, זה מה שהתכוונתי  
בתגובה להודעה מספר 38
 
   זה היה הפאנץ' ליין ....
אסור לכתוב הודעות בשעות מאוחרות :|


קאש-באק ישראלי: https://www.cashback.co.il/?uref=33330
קאשבק לAsos ואמזון דרך Ebates: https://goo.gl/MX87Y7 - מקבלים 10$ לאחר שימוש ראשון.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
cfirzzz לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.8.02
5060 הודעות, 2 פידבק
   21:24   14.01.12   
אל הפורום  
  33. זה כמעט נכון  
בתגובה להודעה מספר 16
 
   אתה מדבר על O(n במקרה הממוצע, במקרה הגרוע זה O(n^2 ...
אתה לא יכול להבטיח ב hashtable סיבוכיות .. (רק גרוע ביותר)...

אגב
אם אומרים את הטווח, אפשר לדעת ב O(1,
שהרי אם המערך בגודל n אין חזרות.
ואם הוא גדול מ n אזי יש חזרות.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dvir8
חבר מתאריך 13.5.02
5929 הודעות
   09:12   17.01.12   
אל הפורום  
  40. איזה הענות יש בפורום...תודה לכולם הגשתי את העבודה :]  
בתגובה להודעה מספר 0
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net