עבור לתוכן

שאלה ב C#

Featured Replies

פורסם

שלום לכולם

מישהו בבקשה יכול לעזור לי לפתור את השאלה הבאה:

כתוב פעולה המקבלת שני מערכים של מספרים שלמים,a ו-b. הפעולה מחזירה מערך חדש שהוא מכפלת שני המערכים a ו-b/

הקפידו שסדר הגודל של הפעולה יהיה (O(n.

נלקח מספר עיצוב תוכנה מבוסס עצמים בשפת C# - פרק 5 - יעילות - ע"מ 146 שאלה 17.

להלן קישור:

http://sites.huji.ac.il/science/unit4_2007/Csharp/chap5-Effic-CS.pdf

הצלחתי ליצור פעולה שתעשה את זה, הבעיה היא שסדר גודל הפעולה שלי הוא (O(n^2. אשמח אם מישהו יוכל לומר לי

איך אני יכול לפתור את השאלה הזאת שסדר גודלה יהיה רק (O(n

פורסם

תחשוב על צורה אחרת לייצג את האיברים במערך c (באופן מתמטי).

פורסם
  • מחבר

הצלחתי:

 public static int[] Multiply(int[] arr1, int[] arr2)
{
int[] multi = new int[arr1.Length];
int sum = 0;
for (int i = 0; i < arr2.Length-1; i++)
{
sum = sum + arr2[i];
}
for (int i = 0; i < arr1.Length-1; i++)
{
multi[i] = arr1[i] * sum;
}

return multi;
}

השאלה עם זה נחשב מסדר גדול n עם השתמשתי בשתי לולאות

פורסם

כמובן, כי אז אתה סוכם את זמני הריצה (במקום לכפול).

פורסם
  • מחבר

תודה רבה

ד"א אהבתי את השם :P

פורסם

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

ביקשו ממך מערך שהוא כפל 2 המערכים...

כלומר משהו כזה:

[4] * [4] = [4]

[3] * [3] = [3]

[2] * [2] = [2]

[1] * [1] = [1]

והפלט הוא המערך השלישי.

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


public static int[] Multiply(int[] arr1, int[] arr2)
{
int[] multi = new int[arr1.Length];
for (int i = 0; i < arr1.Length-1; i++)
{
multi[i] = arr1[i] * arr2[i];
}

return multi;
}

פורסם

זו לא הייתה הדרישה.

קרא את השאלה בקובץ ה-pdf שהוא צירף.

פורסם

אוקיי טעות שלי... קראתי רק את השאלה שהוא רשם ולא מהקובץ המצורף...

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים