פורסם 2013 במאי 712 שנים שלום לכולם, אני צריך לכתוב פונקציה ב C# אשר מקבלת מערך ומחזירה פרמוטציה רנדומלית של הערכים בו כך שההסתברות תהיה אחד חלקי אן עצרת. צירפתי את הפונקציה ורציתי לדעת האם היא נכונה לדעתכם. האם יש עוד מקרים שלא לקחתי בחשבון? תודה רבה לעוזרים, להלן הקוד: public static void RandomPermuteOfArray(int[] arr, int n) { Random rand = new Random(); int i; int currentIndex = 0; for (i = n - 1; i >= 1; i--) { currentIndex = rand.Next(0, i + 1); swap(ref arr[i], ref arr[currentIndex]); } }
פורסם 2013 במאי 712 שנים נראה סבבה, פרט לכך שעדיף שאת rand תיצור רק פעם אחת, מחוץ לפונקציה (ראה את הסטיקי שאלות נפוצות בשביל הסבר למה).
פורסם 2013 במאי 1012 שנים אחרת ה-swap לא היה מחליף ביניהם.פה יש דוגמה שמסבירה את העניין:http://webmaster.org.il/articles/csharp-parameters-ref-outשים לב שכשמגדירים ארגומנטים לפונקציה כ-ref, אז גם כשקוראים לפונקציה חייבים לשים ref.אופציה נוספת הייתה לא להעביר את התאים עצמם במערך, אלא את כל המערך ואינדקסים אליו, כלומר במקום ש-swap תראה ככה:void swap(ref int x, ref int y) {... }היא תראה ככה:void swap(int[] arr, int i, int j) {... }(השיטה השנייה, אגב, היא יותר יעילה, אבל זה די זניח) נערך 2013 במאי 1012 שנים על-ידי שניצל
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.