PDA

View Full Version : کمک فوری : بازسازی فایل ترتیبی



Tarrah
شنبه 21 آذر 1383, 12:57 عصر
سلام
یه فایل داریم از نوع ترتیبی.این فایل رو دو قسمت در نظر می گیریم.یه قسمتش مثلا 25000 تا رکوردش مرتب (sorted) هست ویه قسمت overflow داره که رکوردهایی رو که بعدا به فایل اضافه می کنیم در این قسمت قرار می گیرند.حال می خواهیم وقتی تعداد رکوردهای این قسمت به 5000 تا رسید فایل رو سازماندهی مجدد کنیم.
در ضمن sort کل فایل باید در داخل همان فایل باشد و نمی توانیم از فایل کمکی استفاده کنیم.
چه روشی رو برای این الگوریتم یا کد برنامه پیشنهاد می کنید؟ اگه link خاصی می دونین لطفا ادرسشو برام بنویسین.ممنون :oops:
ممکنه بگین مربوط به این قسمت نیست سوالم ولی 2 تا دلیل داشتم:
1-کسانی که دلفی کار اند معمولا اشنائیشون با pascal زیاده
2-لطف دوستان نسبت به این قسمت سایت بیشتره :wink:
بازم ممنون :D

hps
شنبه 21 آذر 1383, 13:12 عصر
طول Recordهات ثابته یا متغیر ؟


می خواهیم وقتی تعداد رکوردهای این قسمت به 5000 تا رسید

منظورت قسمت Overflow ؟


سازماندهی مجدد

سازماندهى مجدد شامل چه کارهایى مى‌شه ؟ آیا منظورت Restructure به طور دقیق‌تر سازماندهى مجدد رو تعریف کن.

phantasm
شنبه 21 آذر 1383, 14:15 عصر
برای مرتب سازی های خارجی Extennal Sorting معمولا از HeapSort استفاده میشه ٬چون میشه عمل خوندن I/O و مرتب سازی رو بصورت موازی انجام داد.


در ضمن sort کل فایل باید در داخل همان فایل باشد و نمی توانیم از فایل کمکی استفاده کنیم.

برای سورت کردن فایل و ادغامش با فایل اصلی دو تا فایل(اصلی و سرریزی) رو به صورت قطعه قطعه توی حافظه میاری و بعد از سورت کردن رکوردهایی که بصورت منطقی حذف نشدند اونها رو ادغام و روی دیسک مینویسی.
البته در Restructuring اگه فایلت دارای ایندکس یا ...باشه باید اونها رو هم آپدیت کنی.



1-کسانی که دلفی کار اند معمولا اشنائیشون با pascal زیاده

درسته ٬ولی به سوال شما چه ربطی داره؟

Tarrah
شنبه 21 آذر 1383, 14:22 عصر
با سلام مجدد
1- طول همه رکوردها یکیه
2- بله وقتی overflow به 5000 رسید می خواهیم این 5000 تا رو با 25000 تا قاطی کنیم طوری که کل 30000 تا رکوردمون تو فایل مرتب باشه.بر اساس فیلد خاصی مثلا id .
3- منظور از سازماندهی مجدد همون sortکلی هست+ممکنه رکوردهایی رو حذف منطقی کرده باشیم یعنی برا حذفشون مثلا id اونارو 0 یا null کرده باشیم.این رکورد ها رو هم می خواهیم حذف فیزیکی بشن.یعنی کلا از فایل حذف بشن (روشون اطلاعات بنویسیم )
:mrgreen: برای مثال برنامه نویسی مد نظر هم باید رکوردها رو به صورت random تو فایل ایجاد کنیم که شامل دو فیلد id و name می باشند.
ممنون :thnx:

Tarrah
شنبه 21 آذر 1383, 14:30 عصر
phantasm عزیز
از راهنمائیتون ممنون.ولی یادم رفته بود بگم که نباید از heap استفاده کنیم.
احتمالا باید از insertion sort استفاده کنم فقط می خواستم مطمئن بشم.

نقل قول:
1-کسانی که دلفی کار اند معمولا اشنائیشون با pascal زیاده

درسته ٬ولی به سوال شما چه ربطی داره؟

در مورد این قسمتم چون خودم با فایل ها تو درس پاسکال آشنا شدم فکر می کنم نظرم غلط نباشه. :)

phantasm
یک شنبه 22 آذر 1383, 00:09 صبح
احتمالا باید از insertion sort استفاده کنم فقط می خواستم مطمئن بشم.

به هر حال روش کار تقریبا مثه همونیه که در بالا عرض شد.در ضمن insertion sort برای این کار اصلا مناسب نیست ٬ من بعد از HeapSort الگوریتم MergeSort رو برای این کار پیشنهاد میکنم.



موفق باشی.

Tarrah
یک شنبه 22 آذر 1383, 08:07 صبح
phantasm عزیز
متشکرم. :thnx: