שאלה על System.StackOverflowException ב - C#

susony

New member
בפרוייקט הקודם שעשיתי

לא כתבתי שום פונקצה רקורסיבית.
איך אני בודק את עומק הרקורסיה ב-C#?
איך אני משנה את היכולת לעבוד עם עומקים גבוהים יותר?

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

susony

New member
קלטתי, נתת לי קוד למעלה,

אני כבר הולך לראות אם אני מבין אותו
 

nocgod

New member
תכתוב פוקנציה שקוראת לעצמה רקורסיבית ומדפיסה

מונה :)
נגיד אצלי זה נפל ב:

51525

Process is terminated due to StackOverflowException.
Press any key to continue . . .


כאשר זה היה הקוד:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication4
{
class Recurence
{
public void recure(int i)
{
Console.WriteLine(i);
recure(++i);
}
}

class Program
{
static void Main(string[] args)
{
Recurence r = new Recurence();
r.recure(1);
}
}
}
 

susony

New member
עשיתי את זה

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

קיבלתי,
ואני עובד על זה.

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

nocgod

New member
למען האמת אני לא בדיוק יודע מה אתה צריך לעשות

אבל רקורסיות על מטריצות כל כך גדולות לא נראה לי כואב.
אולי כדאי לנסות איזה branch ניסיוני של הרצה על גראף
 

susony

New member
הפרוייקט הוא פרוייקט מחקרי במוליכים למחצה

קשה לילהסביר את המערכת הפיזיקלית, והיא לא כל כך חשובה לבעיה האלגוריתמית.

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



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

סה"כ רוב הבעיות שניתנות לתיאור ע"י חיפוש באיזו מטריצה, כבר נפתרו...
 

susony

New member
אני רק נכנס למחקר,

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

nocgod

New member
נראה לי כמו משהו שיכול להיות מיוצג על ידי גרף

כל node מהווה נגד, כל חיבור בין 2 nodes (כנראה החיבורים הם מכוונים בגלל זרימת זרם לפי חוקי קירכהוף)
כל חיבור יכול להיות בעל משקל (הסתברות), כל node יכול להיות בעל ערך (נניח התנגדות הנגד)
אתה גם יכול להעביר את הבעיה הזאת לעולם של flow networks אני מניח תמצא בעולם הזה אלגוריתמים שאתה יכול לרתום.
מאחר ואני מניח גם שלא יהיו מעגלים בגרף (מבחינה פיזיקלית נראה לי לא קיים לא?)
תוכל להפוך את הגראף ל DAG ונפתח עוד עולם שלם של אלגוריתמים שאתה יכול לרתום לשירותך...
 

susony

New member
וואוו, מעולה,

איזה יופי,
זה אומר שיש לי מה ללמוד,
ומצד שני, שדברים ילכו מהר.

תודה על העזרה
 
אבל איפה הבשר? Where is the beef ?

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

susony

New member
שוב, מדובר על רשתות

שנוצרות בצורה אקראית,
לא רשתות סגורות מראש שבנינו אותן.


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

זו מטריצת ההתנגדות שמקבלים אחרי "ההגרלה"?
האם "מוגרל" רק אם הנקודות X,Y מחוברות, וערך הנגד ביניהן קבוע מראש? האם הוא קבוע או משתנה בין הנקודות?
 

susony

New member
בתור התחלה

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

בהמשך נדבר על רשתות בהם מחוברים גם אתרים רחוקים אחד מהשני.
 

susony

New member
האמת היא שהתוכנית שבניתי היא

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

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

nocgod

New member
לפני שאתה קופץ לממש אלגוריתמים

תנסה להבין אם הבעיה שלך יכולה להיות מוצגת על גרף ואיזה אלגוריתמים קיימים תוכל לרתום כדי לפתור אותה. אין שום סיבה לכתוב הכל לבד אם יש ספריה שנכתב על ידי חוקרים בתחום הגראפים בצורה אופטימלית (או יותר טובה ממה שאני או אתה נכתוב בהנחה שזה לא התחום שלנו).
אני הייתי ממליץ על 2 ספריות לג׳אווה שיצא לי לשחק איתן:
1. Jgraph+JgrapT אחד בשביל אלגוריתמים שניה בשבילמייצוג ויזואלי.
2. JUNG - זו ספרייה גדולה שמאגדת גם ייצוג ויזואלי מעל סווינג וגםאלגוריתמים מורכבים שכבר ממומשים.
 
למעלה