נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: מציאת 2 מספרים במערך בJAVA

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
אלעד
משתמש חבר
משתמש חבר
סמל אישי

הצטרף / הצטרפה: 21 March 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 166
נשלח בתאריך: 26 May 2008 בשעה 08:56 | IP רשוּם
ציטוט אלעד

אני צריך למצוא במערך ממוין 2 מספרים שסכומם שווה למספר שאני מעביר לשיטה. הבעיה היא שאני צריך לעשות את זה בסיבוכיות קטנה מ (O(N ולא ,O(nlog2n) שזה לעשות WHILE ולהגדיל את המערך כול פעם.

 

 



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

הצטרף / הצטרפה: 11 November 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 354
נשלח בתאריך: 26 May 2008 בשעה 11:11 | IP רשוּם
ציטוט yohai

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

נותן חייב להיות אפשרות שיורכב על-ידי 2 מספרים במערך.

 

 

חזרה לתחילת העמוד הצג את כרטיס החבר של yohai חפש הודעות אחרות של yohai בקר בדף הבית של yohai
 
אלעד
משתמש חבר
משתמש חבר
סמל אישי

הצטרף / הצטרפה: 21 March 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 166
נשלח בתאריך: 26 May 2008 בשעה 17:16 | IP רשוּם
ציטוט אלעד

1. אפשר להוריד גפוליות אם זה בעיה.

2. לא



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

הצטרף / הצטרפה: 11 November 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 354
נשלח בתאריך: 26 May 2008 בשעה 19:12 | IP רשוּם
ציטוט yohai

נגיד יש לנו מערך מ- 1-20 ואנו רוצים לבדוק 2 מספרים עבור המספר 31

לוקחים את המספר הכי גדול שיש לנו  במערך (20)

ואז עושים 31-20 והערך שאנו מקבלים הוא 11

לכן עבור המספרים 11-20 אנו נבדוק אם יש שני מספרים שסכומם 31

למצוא את המספר 11 או המספר הכי קטן שבא אחריו ייקח Logn

מהמיקום שמצאנו (המספר 11) אנו בודקים מה המספר הנוסף שישלים ל-31 והוא 20.

ואז עושים חיפוש אם יש 20 שזה ייקח logn

(נגיד אם אין את המספר עשרים), עוברים למספר הבא שהוא 12, ומחפשים אם יש את

המספר 19, שלמצוא אותו ייקח logn.

אם יש, אז מצאנו מה שחיפשנו, וכך ממשיכים הלאה עד שמגיעים למספר שהוא גדול או שווה

למחצית המספר שאנו מחפשים לדוגמא 16+17 יותר גדולים מ-31, לכן אין טעם להמשיך.

עקרונית אנחנו עושים n פעמים חיפוש של logn לכן זה ייצא nlogn מה שלא טוב.

לכן, על מנת לשפר את החיפוש נשתמש ב-HashTable.

ולכן החיפוש של האיברים יהיה קבוע. עכשיו באופן כללי אתה תמיד תעבור על N איברים,

כי מה לעשות גם N/1000 איברים נחשב ל-N איברים וזה לא משנה משנה מה הערך של N.

לכן עם HashTable תוכל להצטמצם ל-O(n)/ok.

אם מישהו מוצא איך אפשר להצטמצם עוד יותר, אשמח לשמוע...

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

תיכנותית לפי דעתי, O(n) זה הכי מהיר שאפשר...

 

חזרה לתחילת העמוד הצג את כרטיס החבר של yohai חפש הודעות אחרות של yohai בקר בדף הבית של yohai
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

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