עזרה בכתיבת תוכנית ב C++ , קבצים ופקודות ביטים - עמוד 3 - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

עזרה בכתיבת תוכנית ב C++ , קבצים ופקודות ביטים


SeaMonster

Recommended Posts

מבחינת זמן ריצה שני הפיתרונות (מערך רגיל ומערך של ביטים) הם בעלי זמן ריצה שווה , בסביבות ה 1.2-1.3 שניות.

לעומת זאת צריכת הזיכרון של מערך הביטים קטנה פי 10 מאשר המערך הרגיל. ולכן הוא יעיל יותר בהרבה.

קישור לתוכן
שתף באתרים אחרים

  • תגובות 33
  • נוצר
  • תגובה אחרונה

משתתפים בולטים בדיון

משתתפים בולטים בדיון

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

עבור הפתרון של הביטים - עבור קריאה בודדת של הזיכרון יש לך 8 דגלים.

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

קריאה מהזיכרון היא איטית, ולכן הפתרון של המערך יהיה איטי יותר.

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

מה שנשאר זה למצוא את הביט הכבוי (עם הLOG שהצעת או בדרך אחרת).

דרך אחת לא חשובה לעשות את זה:

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

אם כן - תיקח פעם את החלק העליון של הערך, ותבדוק אותו. אם הוא 0xFFFFFFFF, תעבור לחלק התחתון. אם לא - תישאור בחלק העליון.

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

שים לב שהחל מ- AX יש לך את AH ו- AL שאתה יכול להשתמש בהם(מבלי להעביר את הערך לרגיסטרים אחרים - שימושי עם ROTATE).

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

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.


×
  • צור חדש...