מעבר לתוכן


תמונה

עזרה בשפת C


  • Please log in to reply
81 replies to this topic

#16 קריימר

קריימר

    סתמנכ"ל הפורום בדימוס

  • גנרלים בדימוס
  • 23743 הודעות:

פורסם 01/09/2005 - 17:40

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

<{POST_SNAPBACK}>

אני חושב שציטטת את ההודעה הלא נכונה :unsure:

על כל פנים, זה נכון שאני לומד הנדסת תוכנה, ונכון שאני אוהב תכנות והכל, אבל כמו שכבר אמרת, זה משהו שהוא די חובה למי שאמור להיות מהנדס. כשם שאנחנו לומדים חדווא בשביל שתהיה לנו רמה מסוימת של מתמטיקה, ופיסיקה כדי להבין תהליכים, למרות שלא יהיה לנו כמעט שימוש בתכנים שלמדנו - באותו אופן חשוב גם ללמוד אלגוריתמיקה - כדי להבין זרימת תהליכים. זה ישום קצת שונה, וקצת יותר קרוב "לחיים האמיתיים" של תכנים שלומדים בקורסים מתמטיים, וזה מראה הרבה על חשיבה לוגית. בגלל זה התרגילים שלכם לפעמים יותר קשים מבחינה אלגוריתמית, ופחות מבחינה תכנותית. אני יכול רק להגיד שאצלנו במחלקה יש קורסים קשים בהרבה מבחינה אלגוריתמית, אבל מצד שני יש קורסים שהרמה האלגוריתמית שנדרשת בתרגילים היא ממש מצחיקה (למעשה לא נדרשת) אבל עיקר הבעיה הוא במימוש (תכנות)
או בקיצור: נסו להפריד את השפת תכנות מהאלגוריתם, ולנסות להבין את התהליך.
תמונה מצורפת
"I'm out there Jerry and loving every minute of it."

קינמונים להמונים

:מסמיק:
קריימר, אתה מספר 1!!!!


#17 mipmip

mipmip

    הבחורה עם הציפור

  • גנרלים בדימוס
  • 19316 הודעות:

פורסם 01/09/2005 - 17:45

אני חושב שציטטת את ההודעה הלא נכונה :unsure:

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

<{POST_SNAPBACK}>


יש מצב... :הממ:

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



רגע, אז עכשיו אני צריכה לשנות את היוזר לmipBA ?

#18 Elegant...And Dying

Elegant...And Dying

    Survival Of The Fittest

  • רשומים+
  • 11474 הודעות:

פורסם 01/09/2005 - 19:59

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

Champions Train Losers Complain


#19 catch24

catch24

    התפסן בשדה השאפים

  • רשומים+
  • 5232 הודעות:

פורסם 01/09/2005 - 20:01

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

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

Unattended children will be given an espresso and a Texas Firefighters 2008 calendar

RACISM IS IGNUNT: Because there are so many other great reasons to hate people on an individual basis

תמונה מצורפתפורום RAINBOW - הפרוטוקולים של מתרוממי ציון תמונה מצורפת


#20 BMWE

BMWE

    כסף

  • רשומים+
  • 8620 הודעות:

פורסם 01/09/2005 - 20:13

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

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

<{POST_SNAPBACK}>

אל תזכיר את השם שלו אפילו.


אגב, מתוך שיעור תכנות שלי לפני כך וכך שנים הדן ברקורסיות למיניהן:
void Print1()
{
	printf("fuck");
	Print2();
}

void Print2()
{
	printf("Sicsic\n");
	Print1();
}

נ.ב. קטע זה נכתב לא בהומור
גם לי יש אחלה משחק

#21 SpiderGoat

SpiderGoat

    סופר-גיבור בהזמנה. בעת הצורך נא להתקשר לקו החם!

  • רשומים+
  • 8026 הודעות:

פורסם 01/09/2005 - 20:25

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

<{POST_SNAPBACK}>

קראתי פעם,
קראתי פעמיים..
מהפה שלך זה נשמע כל כך פשוט עד כדי גיחוך, ויחד עם זאת זה עדיין :blink: :no:
"is it a bird?! an airplane?! no - it's the SpiderGoat..."
אז מה... את באה לפה הרבה? :סמיילי קורץ בשרמנטיות:
חדל עיזים..
אני לא בזול - אני בחינם!
באהבה ובמלחמה אין חוקים - בדיוק כמו בתור בסופר...!
סופר גיבור-
כשאני לא טובע!

#22 mipmip

mipmip

    הבחורה עם הציפור

  • גנרלים בדימוס
  • 19316 הודעות:

פורסם 01/09/2005 - 20:45

אסור לנו עדיין להשתמש במערך דינמי. הוא בקושי הסכים שאנחנו נשתמש במערך דו מימדי. :(

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

<{POST_SNAPBACK}>


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



רגע, אז עכשיו אני צריכה לשנות את היוזר לmipBA ?

#23 Elegant...And Dying

Elegant...And Dying

    Survival Of The Fittest

  • רשומים+
  • 11474 הודעות:

פורסם 01/09/2005 - 20:46

קראתי פעם,
קראתי פעמיים..
מהפה שלך זה נשמע כל כך פשוט עד כדי גיחוך, ויחד עם זאת זה עדיין  :blink:  :no:

<{POST_SNAPBACK}>

אני עסוק בקורס קיץ גם כן, כידוע לך, ולכן עמוס למדי
אך אשמח לעזור פה ושם
תראה, תתחיל לתכנת משהו, תחשוב על אלגו' בסיסי, קודם כול תיישם שלב 1 עד 5 שם( כול הקטע של המיון וכו' שדי פשוט)
לאחר מכן תיצור מערך בגודל הנתון לך
ותיצור פונקציה שתמלא אותו על פי הקוביות הנתונות.
כאשר הצעתי אלייך היא שתשים את הקוביות בתוך רשימה ובכול שלב שאתה נכנס לרקורסיה אתה מוחק את זאת שהשתמשת בה כרגע לפני הכניסה לפונקציה שוב (כדי למנוע חזרה על אותה אחת בטעות)
כעת כול מה שהפונקציה שלך תעשה פחות או יותר יהיה להציב את הקוביה במקום פנוי ולקרוא שוב רקרוסיבית לעצמה, כאשר מספר הקריאות בכול פונקציה יהיה עם LOOP של FOR על כול הקוביות שיש.
בצורה כזאתי אתה עובר על כול האפשרויות עד שאתה ממלא את המטריצה כמו שצריך
או שחזרת לפונקציה הראשונית ממנה קראת ואין שום פתרון ואז אתה מחזיר שאין פתרון.
אחר כך אם תסיים ויבוא לך אז ניתן לשפר את האלגו' הזה די הרבה, ולהגיע לזמן ביצוע ממש טוב לעומת נסיון של כול האפשרויות(O של N בשלישית אני חושב, מחשיבה של רגעים ספורים אך יכול להיות שאני טועה וניתן יותר טוב)
תהנה ובהצלחה :וי:

Champions Train Losers Complain


#24 number6

number6

    Things could be Different. But They're not

  • רשומים+
  • 8641 הודעות:

פורסם 01/09/2005 - 20:50

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

<{POST_SNAPBACK}>


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

The reception's gotten fuzzy
The delicate balance has shifted
Put on your gloves and your black pumps
Let's pretend the fog has lifted
Now you see me
Now you don't
Now you say you love me
Pretty soon you won't
If we get our full three score and ten
We won't pass this way again
So kiss me with your mouth open
Turn the tires toward the street
And stay sweet


#25 Elegant...And Dying

Elegant...And Dying

    Survival Of The Fittest

  • רשומים+
  • 11474 הודעות:

פורסם 01/09/2005 - 20:53

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

<{POST_SNAPBACK}>

מה?
ממש לא, אתה ממיין אל תשכח
שזה היתרון גדול פה.
ואני לא אמרתי לא לבדוק חלק מסויים, אלא לעבור על כול האפשרויות שישנן.
כאשר לא נחזור על חלק פעמיים באותה איטרציה, כלומר אין סיבה שאם הצבנו חלק אז שנציב אותו שוב או שאם ראינו שאין פתרון כאשר אנו מציבים אותו אז לנסות שוב איתו.
ואל תשכח 6 שנכון שהאלגו' הזה די גרוע, אך זה מה שביקשו מהם, לא מדובר פה בקורס אלגוריתמים.
ולכן גם אמרו שלרוב הלוחות יהו נניח 7*8 כמו בדוגמאות ובמקרים כאלו גם על מחשב ממש איטי עם אלגו' ממש גרוע זה ירוץ בזמן סביר לחלוטין.

Champions Train Losers Complain


#26 mipmip

mipmip

    הבחורה עם הציפור

  • גנרלים בדימוס
  • 19316 הודעות:

פורסם 01/09/2005 - 21:02

מה?
ממש לא, אתה ממיין אל תשכח
שזה היתרון גדול פה.
ואני לא אמרתי לא לבדוק חלק מסויים, אלא לעבור על כול האפשרויות שישנן.
כאשר לא נחזור על חלק פעמיים באותה איטרציה, כלומר אין סיבה שאם הצבנו חלק אז שנציב אותו שוב או שאם ראינו שאין פתרון כאשר אנו מציבים אותו אז לנסות שוב איתו.
ואל תשכח 6 שנכון שהאלגו' הזה די גרוע, אך זה מה שביקשו מהם, לא מדובר פה בקורס אלגוריתמים.
ולכן גם אמרו שלרוב הלוחות יהו נניח 7*8 כמו בדוגמאות ובמקרים כאלו גם על מחשב ממש איטי עם אלגו' ממש גרוע זה ירוץ בזמן סביר לחלוטין.

<{POST_SNAPBACK}>


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



רגע, אז עכשיו אני צריכה לשנות את היוזר לmipBA ?

#27 Elegant...And Dying

Elegant...And Dying

    Survival Of The Fittest

  • רשומים+
  • 11474 הודעות:

פורסם 01/09/2005 - 21:19

לא הבנתם למה התכונתי, עוברים על מקרי הבסיס שיש כלומר או שסיימנו למלא את המטריצה או שנשארה קוביה אחת ונמלא איתה וכו'.
אם יש את המקרה בסיס אז סיימנו וזה פשוט מאוד.
אחרת,
נריץ לולאת FOR שבכול פעם תציב קוביה מסויימת במטריצה ותכנס לרקורסיה עם כול שאר הקוביות הנותרות.
כמובן שצריך קצת לשפר את האלגו' הזה כדי שיהיה הגיוני וקצת יותר מהיר, אבל באמת שאין שום בעיה לעבור על כול האפשרויות שקיימות.
דרך נוספת שניתן לעשות היא ליצור עץ בחירות, ולרוץ עליו עד שנגיע לפתרון הנכון אך הרעיון די דומה.
יש די הרבה דרכים לפתור את הבעיה הזאתי, בעיקרון כשמדובר בBRUTE FORCE אז פשוט רצים בצורה מטורפת על איזה מליון אפשרויות עד שפוגעים או שניסנו הכול.

Champions Train Losers Complain


#28 Danny boy

Danny boy

    ברונזה

  • רשומים+
  • 856 הודעות:

פורסם 01/09/2005 - 21:34

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

#29 Danny boy

Danny boy

    ברונזה

  • רשומים+
  • 856 הודעות:

פורסם 01/09/2005 - 21:50

אני עסוק בקורס קיץ גם כן, כידוע לך, ולכן עמוס למדי
אך אשמח לעזור פה ושם
תראה, תתחיל לתכנת משהו, תחשוב על אלגו' בסיסי, קודם כול תיישם שלב 1 עד 5 שם( כול הקטע של המיון וכו' שדי פשוט)
לאחר מכן תיצור מערך בגודל הנתון לך
ותיצור פונקציה שתמלא אותו על פי הקוביות הנתונות.
כאשר הצעתי אלייך היא שתשים את הקוביות בתוך רשימה ובכול שלב שאתה נכנס לרקורסיה אתה מוחק את זאת שהשתמשת בה כרגע לפני הכניסה לפונקציה שוב (כדי למנוע חזרה על אותה אחת בטעות)
כעת כול מה שהפונקציה שלך תעשה פחות או יותר יהיה להציב את הקוביה במקום פנוי ולקרוא שוב רקרוסיבית לעצמה, כאשר מספר הקריאות בכול פונקציה יהיה עם LOOP של FOR על כול הקוביות שיש.
בצורה כזאתי אתה עובר על כול האפשרויות עד שאתה ממלא את המטריצה כמו שצריך
או שחזרת לפונקציה הראשונית ממנה קראת ואין שום פתרון ואז אתה מחזיר שאין פתרון.
אחר כך אם תסיים ויבוא לך אז ניתן לשפר את האלגו' הזה די הרבה, ולהגיע לזמן ביצוע ממש טוב לעומת נסיון של כול האפשרויות(O של N בשלישית אני חושב, מחשיבה של רגעים ספורים אך יכול להיות שאני טועה וניתן יותר טוב)
תהנה ובהצלחה  :וי:

<{POST_SNAPBACK}>



לעשות את הקריאות הרקורסיביות בתוך לולאה?
לא כדאי לעשות קריאה רקורסיבית עם החלק הפנוי הבא, בסוף הפונקציה?

#30 מוש

מוש

    ברונזה

  • רשומים+
  • 759 הודעות:

פורסם 01/09/2005 - 22:22

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

<{POST_SNAPBACK}>

אלגנט, נראה לי שאתה מדבר רמה אחת גבוה מדי. אני אנסה את כוחי:

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

אפשר לממש בכמה צורות, הנה אחת: קחו את החלק הראשון ברשימה, לא משנה איזה. יש שלוש אפשרויות איך לשבץ אותו:
1. באוריינטציה (מאוזן/מאונך) הנוכחית;
2. באוריינטציה האחרת;
3. לא לשבץ בכלל.

בכל אחד משני המקרים הראשונים מנסים לשים את החלק בכל נקודה אפשרית על הלוח ובודקים כל מקרה: אם לא טוב (דורך על חלקים אחרים/יוצא מגבולות הלוח) -- לא הצלחנו וממשיכים לנסות. אם הצלחנו, בכלל לא בודקים אם שמנו במקום "טוב" או לא, העיקר שהצלחנו, בלוח יש יותר משבצות תפוסות והורדנו חלק אחד מהרשימה. קיבלנו בעיה קטנה יותר ואותה שולחים ברקורסיה.
גם במקרה השלישי אמנם לא מילאנו תאים בלוח אבל הורדנו חלק מהרשימה ולכן הבעיה קטנה יותר ושולחים אותה ברקורסיה.

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

אם אני לא ברור תגידו ואני אנסה להסביר. בהצלחה! :)

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

ההודעה נערכה על ידי מוש: 01/09/2005 - 22:25

"All these worlds are yours except Europa. Attempt no landings there."





0 משתמשים קוראים נושא זה

0 משתמשים, 0 אורחים, 0 משתמשים אנונימיים