06-05-2007, 18:36
|
|
|
חבר מתאריך: 21.01.07
הודעות: 58
|
|
במקרה כזה, מה ששימי אמר כבר לפני נראה לי כמו הדרך הכי טובה, עם שינוי קטן: אתה רוצה ליצור פרמוטציה (תמורה בעברית, אם אני זוכרת נכון) רנדומלית של כל מספרי התאים במערך שלך.
כלומר, בנוסף למערך הרגיל שלך יהיה לך מערך נוסף בגודל 10000, שמאותחל בתור {9999,....3, 2, 1, 0}. עכשיו תרוץ מ-0 עד 9999, ולכל תא תחליף אותו עם תא אקראי אחר, כך שתקבל לדוגמא: {4,.... ,3443 ,221 ,3 , 833}. הערבול פה הוא מה שאקראי.
בשלב הזה תיקח כמה ערכים שתרצה מהמערך המעורבל ותשתמש בזה בתור אינדקס למערך הקיים. בדוגמא למעלה, תיקח את הערך של תא 833 (או ההמרה שלו למערך דו-מימדי), אחריו את התוכן של תא 3 וכך הלאה.
בפעם הבאה שתרצה קבוצה רנדומלית, תערבל את המערך הזה מחדש, ותחזור על התהליך. תוכל גם להמשיך לבחור מהמערך המעורבל הקיים, עד שמיצית את כל 10000 הערכים, ואז תערבל מחדש.
וקצת תיאוריה (מי שזה לא מעניין אותו, מוזמן להתעלם) : התפלגות הפרמוטציות השונות לא אחידה - ז"א, לא לכל הפרמוטציות יש סיכוי של אחד חלקי !N להבחר. לצורך הפשטות, אנחנו לא מתייחסים לזה כאן.
אם משהו לא ברור, תגיד ואסביר עוד פעם.
JAM
|