
10-01-2009, 21:28
|
|
מנהל
|
|
חבר מתאריך: 26.07.08
הודעות: 6,473
|
|
עדיין איני בטוח שהבנתי מהו המושג "סיבוכיות" אבל האם לא התכוונת לסיבוכיות של m*n?
כאשר m זה גודל איבר ראשון ו-n גודל איבר שני...
בדיקה של איבר מול איבר מתבצע בצורה הבאה:
על כל איבר במערך הראשון, תעשי בדיקה על כל האיברים שבמערך השני (אם הם שווים אליו).
כך את עוברת על כל האיברים במערך הראשון...
במקביל לנ"ל, תעשי מערך flags שיעיד אם האיברים במערך השני קיימים במערך הראשון, וגם איזה מהם, ע"פ האינדקס... (רמז לכך שגודל מערך ה-flags צריך להיות כגודל המערך השני)
מערך ה-flags הוא בשביל שלא תצטרכי לבצע פעולה דומה של בדיקת איבר מול איבר בשביל המערך השני.
אני חושב שיעילות פחות מהנ"ל אי אפשר להשיג...
הרי בכל מקרה חובה לבדוק איבר מול איבר. אלא אם יש איזה פונקציה מתמטית שתעזור פה...
אה! בעצם...
יש לנו את פעולת הכפל.
תוכלי בתחילה לכפול את כל האיברים במערך הראשון, כך:
עכשיו, במערך השני, אם יש איבר שהוא מתחלק במספר הנ"ל (שיוצא בתוצאת הכפל) בלי להשאיר שארית, זאת אומרת שהוא קיים במערך הראשון. אחרת הוא לא קיים במערך הראשון.
שימי לב שבפעולת הכפל תצטרכי מינימום משתנה מטיפוס long... וגם כדאי שהכפל יתבצע על המערך הקטן ביותר
אולי אפשר לבצע משהו עם char עם איזה 20 בתים ליתר ביטחון... או בעצם לבצע כפל בין כמה איברים ולשמור את זה במערך מטיפוס long כדי שלא יווצר מצב של overflow
עריכה: בעצם רעיון (האחרון) טיפשי ויספק טעות...
נערך לאחרונה ע"י dorM בתאריך 10-01-2009 בשעה 21:32.
|