ABA


"יש דרך לפתור את השאלה הבאה בלי לסדר את המערכים? (מבוא למדמ''ח)"
גירסת הדפסה        
קבוצות דיון לימודים, מדע ותרבות נושא #11929 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 11929
כובען  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.3.10
24350 הודעות, 21 פידבק
   12:54   14.12.12   
אל הפורום  
  יש דרך לפתור את השאלה הבאה בלי לסדר את המערכים? (מבוא למדמ''ח)  
 
http://i.imgur.com/cO5ty.png

אני כבר השתגעתי,
תודה.


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

  האשכול     מחבר     תאריך כתיבה     מספר  
  לא יעבוד.. inno3D 14.12.12 15:16 1
     זה עדיף מבחינת סיבוכיות? כובען  14.12.12 15:18 2
  לא ראיתי שרשום פה שאסור לשנות את המערכים MrSus 14.12.12 15:24 3
     קוד MrSus 14.12.12 15:38 8
         כן, אם אפשר לכתוב את זה ביעילות טובה יותר, הניקוד נחתך בחצי כובען  14.12.12 19:58 11
             יעילות טובה יותר מ- n^2? MrSus 14.12.12 20:57 13
                 לא ברמת החסימות, אבל אם אפשר להמנע מלולאות מקוננות לדוגמא אז חייבים... כובען  14.12.12 21:26 14
         ותודה רבה!!!! :} כובען  14.12.12 20:04 12
  מצאתי באינטרנט TheKid 14.12.12 15:26 4
     חחחחחחחחחחח אדיר כובען  14.12.12 15:30 6
  מכתב Dimona 14.12.12 15:26 5
     זה יעילות של n^2 כובען  14.12.12 15:33 7
     וזה לא רקורסיבי, אבל תודה ימלך :-) כובען  14.12.12 19:58 10
  אה כבר כתבו לך תשובה O'Brien 14.12.12 16:24 9

       
inno3D
חבר מתאריך 21.4.02
4533 הודעות
   15:16   14.12.12   
אל הפורום  
  1. לא יעבוד..  
בתגובה להודעה מספר 0
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
כובען  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.3.10
24350 הודעות, 21 פידבק
   15:18   14.12.12   
אל הפורום  
  2. זה עדיף מבחינת סיבוכיות?  
בתגובה להודעה מספר 1
 


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
MrSus
חבר מתאריך 8.5.09
1801 הודעות
   15:24   14.12.12   
אל הפורום  
  3. לא ראיתי שרשום פה שאסור לשנות את המערכים  
בתגובה להודעה מספר 0
 
   ערכתי לאחרונה בתאריך 14.12.12 בשעה 15:28 בברכה, MrSus
 
אז אם מותר לשנות, אז זה דיי פשוט..

תנאי עצירה:
size=0 ואז מחזירים true

אחרת, בהינתן שני המערכים, רצים על המערך השני עד (size-1) ומחפשים איבר ששווה לאיבר האחרון במערך הראשון (כלומר האיבר האחרון הוא האיבר במיקום size-1). אם מצאנו, ולמשל size=3, והאיבר שמצאנו במערך השני הוא במיקום 1, אז מחליפים אותו עם האיבר במיקום האחרון של המערך השני (כלומר מחליפים את האיבר באינדקס 1 עם האיבר באינדקס 2), וקוראים רקרוסיבית לפונקציה עם size-1.
אם לא מצאנו איבר כזה מחזירים false וסיימנו.

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
MrSus
חבר מתאריך 8.5.09
1801 הודעות
   15:38   14.12.12   
אל הפורום  
  8. קוד  
בתגובה להודעה מספר 3
 
   http://pastebin.com/ieiXA8jC

הקוד ב JAVA..

בקורס מבוא יש לכם חשיבות ליעילות בכלל?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
כובען  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.3.10
24350 הודעות, 21 פידבק
   19:58   14.12.12   
אל הפורום  
  11. כן, אם אפשר לכתוב את זה ביעילות טובה יותר, הניקוד נחתך בחצי  
בתגובה להודעה מספר 8
 


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
MrSus
חבר מתאריך 8.5.09
1801 הודעות
   20:57   14.12.12   
אל הפורום  
  13. יעילות טובה יותר מ- n^2?  
בתגובה להודעה מספר 11
 
   ערכתי לאחרונה בתאריך 14.12.12 בשעה 21:00 בברכה, MrSus
 
קצת מוזר לי שלומדים על יעילות בקורס מבוא למדמח..

בכל מקרה קשה לי לחשוב על שיפור היעילות בהינתן החתימה הספציפית של הפונקציה שלכם.

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

בסוף אתה מחזיר true אם כל האיברים במערך העזר הם 0, אחרת מחזירים false.

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

http://pastebin.com/j7zR7ZdW

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

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
כובען  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.3.10
24350 הודעות, 21 פידבק
   21:26   14.12.12   
אל הפורום  
  14. לא ברמת החסימות, אבל אם אפשר להמנע מלולאות מקוננות לדוגמא אז חייבים...  
בתגובה להודעה מספר 13
 


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
כובען  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.3.10
24350 הודעות, 21 פידבק
   20:04   14.12.12   
אל הפורום  
  12. ותודה רבה!!!! :}  
בתגובה להודעה מספר 8
 


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
TheKid לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 5.10.07
17978 הודעות, 1 פידבק
   15:26   14.12.12   
אל הפורום  
  4. מצאתי באינטרנט  
בתגובה להודעה מספר 0
 
   http://pastebin.com/MymhLqky

/* Recursion-Ex14.cpp - check two arrays for similar elements */
#include <iostream>
using namespace std;

bool haveSameElems(int Arr1[], int Arr2[], int size);

const int SIZE = 5;

int main () {
int Arr1[SIZE] = {2, 5, 6, 2, 1};
int Arr2[SIZE] = {1, 2, 6, 5, 2};

cout << (haveSameElems(Arr1, Arr2, SIZE*2) ? "yey" : "ney");

return 0;
} /* Output: yey */

/* assume both arrays are the same size, otherwise if one is bigger then always false */
bool haveSameElems(int Arr1[], int Arr2[], int size) {
int i, j, len = size/2-1; // get the size psyical of each array
bool boom = false;

if (size == 0)
return true; // two empty sets have the same elements
else {
i = 0;
while (!boom && i <= len) {
if (Arr1[len] == Arr2[i]) { // If we find two equal elements
for (j = i; j <= len; j++) // 'pop' that element from Arr2
Arr2[j] = Arr2[j+1];
len--; // pop it from Arr1 by truncing the length
boom = true; // stop looking
}
i++;
}
// If we found two euqal elements, keep looking for more, otherwise stop right now.
return (boom ? haveSameElems(Arr1, Arr2, (len+1)*2) : false); // send the logical size of both arrats
}
}


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
כובען  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.3.10
24350 הודעות, 21 פידבק
   15:30   14.12.12   
אל הפורום  
  6. חחחחחחחחחחח אדיר  
בתגובה להודעה מספר 4
 


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Dimona לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 28.11.10
1910 הודעות, 1 פידבק
   15:26   14.12.12   
אל הפורום  
  5. מכתב  
בתגובה להודעה מספר 0
 
   אני הייתי עושה דבר כזה :
2 משתנים אחד I השני J
I של המערך הראשון - בודק אם יש במערך השני ממקום 0 של J את המספר במידה וכן תמשיך , ומידה ולא תחזיר false

ככה למשל :

http://rotter.name/User_files/nor/50cb290e33018fe0.jpg


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
כובען  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.3.10
24350 הודעות, 21 פידבק
   15:33   14.12.12   
אל הפורום  
  7. זה יעילות של n^2  
בתגובה להודעה מספר 5
 


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
כובען  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.3.10
24350 הודעות, 21 פידבק
   19:58   14.12.12   
אל הפורום  
  10. וזה לא רקורסיבי, אבל תודה ימלך :-)  
בתגובה להודעה מספר 5
 


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

   16:24   14.12.12   
אל הפורום  
  9. אה כבר כתבו לך תשובה  
בתגובה להודעה מספר 0
 
   ערכתי לאחרונה בתאריך 14.12.12 בשעה 16:31 בברכה, O'Brien
 
אז לא משנה.


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

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

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



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