ABA


"חידה למתקדמים בשפת C (או כל שפה אחרת..)"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #13289 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 13289
MadXP

   19:21   14.05.06   
אל הפורום  
  חידה למתקדמים בשפת C (או כל שפה אחרת..)  
 
   רמת קושי : 4/5
ברשותי n מספרים.
הייתי רוצה לדעת אם קיימים 2 מספרים a b (לא בהכרח שונים) כך ש - a^2 = b
בסיבוכיות זמן nlogn וסיבוכיות מקום 1.


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

  האשכול     מחבר     תאריך כתיבה     מספר  
  פשיי הפצצת...נחשוב על זה בהיזדמנות :) sHuMpI 14.05.06 20:07 1
     מערך והם לא ממוינים. MadXP 14.05.06 23:28 7
  אני יחשוב על זה Net_Boy  14.05.06 20:47 2
  מאיפה אתה מביא את השאלות..? Static 14.05.06 21:20 3
     לכל חידה שאפרסם אפרסם את הפתרון. MadXP 14.05.06 23:28 6
  יש לי תשובה לא בטוח שהיא נכונה sHuMpI 14.05.06 22:27 4
     לא עומד בסיבוכיות....ולא הסברת את האלגוריתם שלך... MadXP 14.05.06 23:27 5
  נראה לי איש-האבוקות 15.05.06 09:53 8
     איזה מיון אתה מבצע? MadXP 15.05.06 13:31 9
         heap sort איש-האבוקות 15.05.06 14:00 10
             heap sort הוא אכן מיון שמתבצע בסיבוכיות שציינת אבל.. MadXP 15.05.06 14:58 11
                 תוכל להסביר? איש-האבוקות 15.05.06 17:56 12
                     לא הבנת. MadXP 15.05.06 19:18 13
                         הסתכל איש-האבוקות 15.05.06 20:37 14
                             כל זאת רק כאשר המערך מייצג ערמה! MadXP 16.05.06 01:33 15
                                 תריץ את האלגוריתם על המערך איש-האבוקות 16.05.06 11:23 16

       
sHuMpI

   20:07   14.05.06   
אל הפורום  
  1. פשיי הפצצת...נחשוב על זה בהיזדמנות :)  
בתגובה להודעה מספר 0
 
   המספרים במערך?
אני משער שלא ממוינים..נכון?


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

   23:28   14.05.06   
אל הפורום  
  7. מערך והם לא ממוינים.  
בתגובה להודעה מספר 1
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Net_Boy  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.4.02
17151 הודעות, 1 פידבק
   20:47   14.05.06   
אל הפורום  
  2. אני יחשוב על זה  
בתגובה להודעה מספר 0
 
   חידה נחמדה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Static
חבר מתאריך 1.7.02
1329 הודעות
   21:20   14.05.06   
אל הפורום  
  3. מאיפה אתה מביא את השאלות..?  
בתגובה להודעה מספר 0
 
   זה תרגול טוב לקראת המבחן שלי בסוף הסמסטר במבני נתונים..
אם יש שפ פתרונות אז בכלל סבבה


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

   23:28   14.05.06   
אל הפורום  
  6. לכל חידה שאפרסם אפרסם את הפתרון.  
בתגובה להודעה מספר 3
 
  


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

   22:27   14.05.06   
אל הפורום  
  4. יש לי תשובה לא בטוח שהיא נכונה  
בתגובה להודעה מספר 0
 
   האמת שלא התעסקתי עדיין בסיבוכיות N LOG N בגלל זה אני לא בטוח שזה עונה לדרישות

בכל מקרה לולאה רצה מ-i ל- N
הלולאה השנייה מתחילה מ-i ומגיעה עד ל-N בעזרת j
עכשיו עושים את הבדיקה...

לא בטוח שזה נכון (ממש לא)


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

   23:27   14.05.06   
אל הפורום  
  5. לא עומד בסיבוכיות....ולא הסברת את האלגוריתם שלך...  
בתגובה להודעה מספר 4
 
  


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

   09:53   15.05.06   
אל הפורום  
  8. נראה לי  
בתגובה להודעה מספר 0
 
   קודם כל ממיינים את המערך הפעולה עולה n log n
אח"כ סורקים מהסוף להתחלה ולכל מספר מבצעים חיפוש בינארי במערך בגודל 0..i-1
בחיפוש בודקים אם כל מספר בריבוע גדול מהמספר במיקום i קטן ממנו או שווה לו פעולה זה עולה גם כן n log n בסה"כ שתיי סריקות n log n ולכן הסיבוכיות היא
o(n log n)


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

   13:31   15.05.06   
אל הפורום  
  9. איזה מיון אתה מבצע?  
בתגובה להודעה מספר 8
 
  


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

   14:00   15.05.06   
אל הפורום  
  10. heap sort  
בתגובה להודעה מספר 9
 
   אשר סיבוכיות המקום שלו היא O(1) וסיבוכיות הזמן שלו היא O(n log n)


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

   14:58   15.05.06   
אל הפורום  
  11. heap sort הוא אכן מיון שמתבצע בסיבוכיות שציינת אבל..  
בתגובה להודעה מספר 10
 
   אין לך ערימה תקנית.
לא ציינתי שהמערך שנתתי הוא ערימה תקנית ולכן עליך לבנות ממנו ערימה, לשם כך ,צריך מערך עזר מה שלא תואם את דרישת הסיבוכיות.


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

   17:56   15.05.06   
אל הפורום  
  12. תוכל להסביר?  
בתגובה להודעה מספר 11
 
   ערכתי לאחרונה בתאריך 15.05.06 בשעה 18:05 בברכה, איש-האבוקות
 
תוכל להסביר לי למה? איני מבין מדוע המערך לא יכול לייצג את הערימה


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

   19:18   15.05.06   
אל הפורום  
  13. לא הבנת.  
בתגובה להודעה מספר 12
 
   לא אמרתי שמערך לא יכול לייצג ערמה.
אמרתי כי המערך שנתתי לא בהכרח מייצג ערמה במצבו הנוכחי ולכן עליך לעשות עליו מניפולציה על מנת להעביר אותו לערמה תקנית, מה שידרוש בהכרח עוד מערך עזר.

אם תרצה הרחבה לגבי ערמה ( heapify...) או משהו אחר אשמח לעזור...


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

   20:37   15.05.06   
אל הפורום  
  14. הסתכל  
בתגובה להודעה מספר 13
 
  
void heapsort(int arr, unsigned int N)
{
unsigned int n = N, i = n/2, parent, child;
int t;

for (;;) { /* Loops until arr is sorted */
if (i > 0) { /* First stage - Sorting the heap */
i--; /* Save its index to i */
t = arr; /* Save parent value to t */
} else { /* Second stage - Extracting elements in-place */
n--; /* Make the new heap smaller */
if (n == 0) return; /* When the heap is empty, we are done */
t = arr; /* Save last value (it will be overwritten) */
arr = arr; /* Save largest value at the end of arr */
}

parent = i; /* We will start pushing down t from parent */
child = i*2 + 1; /* parent's left child */

/* Sift operation - pushing the value of t down the heap */
while (child < n) {
if (child + 1 < n && arr > arr) {
child++; /* Choose the largest child */
}
if (arr > t) { /* If any child is bigger than the parent */
arr = arr; /* Move the largest child up */
parent = child; /* Move parent pointer to this child */
child = parent*2 + 1; /* Find the next child */
} else {
break; /* t's place is found */
}
}
arr = t; /* We save t in the heap */
}
}

הקוד נלקח מוויקיפדיה http://en.wikipedia.org/wiki/Heapsort#Implementation_in_C
זהו אלגוריתם למיון ערימה כפי שניתן לראות אין שום שימוש במערך נוסף וזהו כל הרעיון במיון ערימה שהשינויים מתבצעים במערך המקורי!


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

   01:33   16.05.06   
אל הפורום  
  15. כל זאת רק כאשר המערך מייצג ערמה!  
בתגובה להודעה מספר 14
 
   מה שאומר שכל אב גדול מבניו.
כלומר לאינדקס i הבן השמאלי 2*i והבן הימני 2*i + 1 קטנים ממנו..
רק אז תוכל להריץ heapsort על המערך אחרת אין שום משמעות ל Heapsort.

במצב הנוכחי יכול להיות במערך שנתתי מצב בו האב אינו גדול מבניו ואז מיון ערמה כמובן לא יבצע מיון.


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

   11:23   16.05.06   
אל הפורום  
  16. תריץ את האלגוריתם על המערך  
בתגובה להודעה מספר 15
 
   ערכתי לאחרונה בתאריך 16.05.06 בשעה 11:56 בברכה, איש-האבוקות
 
int a={-3,4,3,-1,1}; ותראה בעצמך שזה ממיין

אם האלגוריתם מיון מתחרה במיון מהיר ובקוויק סורט הוא אמור לעשות את אותו הדבר שהם עושים

תסתכל מאפלט באתר הזה http://www-cse.uta.edu/~holder/courses/cse2320/lectures/applets/sort1/heapsort.html האם גם שם במצב ההתחלתי כל איבר גדול מבניו?

עריכה:
הנה עוד אפלט שנותן לך גם לבחור את הנתונים במערך
http://www2.hawaii.edu/~copley/665/HSApplet.html


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

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

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



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