לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

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



  #1  
ישן 04-05-2007, 13:32
צלמית המשתמש של Nati323
  משתמש זכר Nati323 Nati323 אינו מחובר  
 
חבר מתאריך: 25.10.05
הודעות: 1,508
בחירת ערכים באקראיות.

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


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

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

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


ד אַל תַּעַן כְּסִיל כְּאִוַּלְתּוֹ פֶּן תִּשְׁוֶה לּוֹ גַם אָתָּה. ה עֲנֵה כְסִיל כְּאִוַּלְתּוֹ פֶּן יִהְיֶה חָכָם בְּעֵינָיו

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #5  
ישן 05-05-2007, 22:15
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,775
בתגובה להודעה מספר 1 שנכתבה על ידי Nati323 שמתחילה ב "בחירת ערכים באקראיות."

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

ב-PHP יש פונקציה נחמדה שנקראת shuffle (מדריך: http://php.net/shuffle) - שפשוט מערבלת מערכים - אם אתה עושה את זה על המערך שלך, אז אפשר לאחר מכן פשוט לקחת באופן רציף את הערכים, כי סדרם מוגרל. כמובן שהפונקציה הזו בעצמה אמורה לעשות מה שאמרתי לעיל...
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה
נמאס לכם לזכור סיסמאות? לחצו כאן!

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #6  
ישן 06-05-2007, 17:40
צלמית המשתמש של Nati323
  משתמש זכר Nati323 Nati323 אינו מחובר  
 
חבר מתאריך: 25.10.05
הודעות: 1,508
בתגובה להודעה מספר 5 שנכתבה על ידי שימי שמתחילה ב "אם מה שאתה רוצה הוא לקחת..."

JamBurry
כן.

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

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


ד אַל תַּעַן כְּסִיל כְּאִוַּלְתּוֹ פֶּן תִּשְׁוֶה לּוֹ גַם אָתָּה. ה עֲנֵה כְסִיל כְּאִוַּלְתּוֹ פֶּן יִהְיֶה חָכָם בְּעֵינָיו

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #7  
ישן 06-05-2007, 18:36
  JamBurry JamBurry אינו מחובר  
 
חבר מתאריך: 21.01.07
הודעות: 58
בתגובה להודעה מספר 6 שנכתבה על ידי Nati323 שמתחילה ב "JamBurry כן. שימי, אני יודע..."

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

אם משהו לא ברור, תגיד ואסביר עוד פעם.

JAM
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

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

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 05:09

הדף נוצר ב 0.03 שניות עם 10 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר