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

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



  #1  
ישן 18-05-2012, 10:34
  CM0S CM0S אינו מחובר  
 
חבר מתאריך: 17.03.02
הודעות: 2,354
רעיונות ליצירת קובץ אינדקסים לקובץ בצורה ממויינת (C)

שלום,

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

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

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

אשמח לרעיונות,
תודה.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #2  
ישן 20-05-2012, 01:27
צלמית המשתמש של פסטן
  פסטן פסטן אינו מחובר  
 
חבר מתאריך: 14.12.09
הודעות: 9,751
בתגובה להודעה מספר 1 שנכתבה על ידי CM0S שמתחילה ב "רעיונות ליצירת קובץ אינדקסים לקובץ בצורה ממויינת (C)"

אני לא בטוח שאני מבין את השאלה. מה זה אומר שיש לך מערך של אינדקסים ומערך של שמות?

המערכים מסודרים כך ש-names[i]‎ מכיל את השם של הסטודנט שהנתונים שלו נמצאים ב-offset הנתון על-ידי indices[i]‎ עבור כל i?
אם כן, זה ממש פשוט. תייצר מערך של tuple-ים (או pair-ים, במקרה הספציפי הזה), מיין אותו לפי אלמנט השם ב-pair, ואז תפלוט את כל אלמנטי האינדקס של ה-pair-ים במערך.
(אם לא, תייצר את המערך של ה-pair-ים בכל מקרה. זו לא צריכה להיות בעיה.)

אם השאלה שלך היא טכנית, איך מייצרים pair ב-C וממיינים לפי אחד השדות שלו, התשובה היא: מייצרים struct foo { char * name; unsigned long index; };‎ וממיינים בעזרת qsort ופונקציית השווואה שנראית בערך כך :int bar(const void * left, const void * right) { return strcmp((struct foo*)left->name, (struct foo*)right->name); }‎ או משהו כזה...
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה(קרדיט למרשי)
אמר לה ינאי מלכא לדביתיה אל תתיראי מן הפרושין ולא ממי שאינן פרושין אלא מן הצבועין שדומין לפרושין שמעשיהן כמעשה זמרי ומבקשין שכר כפנחס

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

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #4  
ישן 20-05-2012, 14:21
צלמית המשתמש של פסטן
  פסטן פסטן אינו מחובר  
 
חבר מתאריך: 14.12.09
הודעות: 9,751
בתגובה להודעה מספר 3 שנכתבה על ידי CM0S שמתחילה ב "כן, הבנת נכון. וזה מה שעשיתי..."

אין בעיה, אחי. תבוא כל יום!

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

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

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

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

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #6  
ישן 20-05-2012, 17:59
צלמית המשתמש של פסטן
  פסטן פסטן אינו מחובר  
 
חבר מתאריך: 14.12.09
הודעות: 9,751
בתגובה להודעה מספר 5 שנכתבה על ידי CM0S שמתחילה ב "האמת שמיממשתי את המיון לבד,..."

אבל ל-merge sort יש סיבוכיות מקום מטורפת (יחסית), ואף אחד לא אמר לך שהפונקציה qsort באמת עושה quicksort. התקן לא אומר שום דבר כזה (‎§7.20.5.2 ב-ISO/IEC 9899:1999). בנוסף, העף מבט בפוסטים האלה ב-SO:חלק מהקישורים שם שבורים, אז הנה הקישורים המתוקנים:אתה מקבל סיבוכיות של [TEX]O(log_2(n))[/TEX] רק במקרה הגרוע, אם האלגוריתם נאיבי, או אם אתה מרשה שיעבדו עליך (כמו במאמר הזה שהוזכר באחת ההערות לשאלה השניה שקישרתי למעלה: http://www.cs.dartmouth.edu/~doug/mdmspe.pdf). אחרת, אין כל-כך סיבה שזה יקרה.
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה(קרדיט למרשי)
אמר לה ינאי מלכא לדביתיה אל תתיראי מן הפרושין ולא ממי שאינן פרושין אלא מן הצבועין שדומין לפרושין שמעשיהן כמעשה זמרי ומבקשין שכר כפנחס

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

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

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

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

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

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



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

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

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

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