نمایش نتایج 1 تا 4 از 4

نام تاپیک: کمک فوری : بازسازی فایل ترتیبی

  1. #1

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

    سلام
    یه فایل داریم از نوع ترتیبی.این فایل رو دو قسمت در نظر می گیریم.یه قسمتش مثلا 25000 تا رکوردش مرتب (sorted) هست ویه قسمت overflow داره که رکوردهایی رو که بعدا به فایل اضافه می کنیم در این قسمت قرار می گیرند.حال می خواهیم وقتی تعداد رکوردهای این قسمت به 5000 تا رسید فایل رو سازماندهی مجدد کنیم.
    در ضمن sort کل فایل باید در داخل همان فایل باشد و نمی توانیم از فایل کمکی استفاده کنیم.
    چه روشی رو برای این الگوریتم یا کد برنامه پیشنهاد می کنید؟ اگه link خاصی می دونین لطفا ادرسشو برام بنویسین.ممنون :oops:

  2. #2
    کاربر دائمی آواتار MiRHaDi
    تاریخ عضویت
    تیر 1383
    محل زندگی
    تهران - سوهانک
    پست
    982
    سلام
    از فایل دیگری باید استفاده کنی به صورت Temp و بعد از انجام اینکار باید به نام فایل اصلی آنرا تغییر دهی
    و از روش Merg استفاده کن !
    یک اشاره گر در فایل اول یکی در فایل دوم ! آنقدر در فایل اول جلو میری و در فایل سوم کپی میکنی تا رکورد فایل دوم کوچکتر شود و بعد رکورد فایل 2 را کپی میکنی و اشاره گرش را به جلو میبری ....
    در آخر فایل 1 را پاک میکنی و فایل 3 را به 1 تغییر نام میدهی همین
    بای

  3. #3
    به جای فایل دوم میتونی از آخر همون فایل هم استفاده کنی.فقط یکم سخت تره

  4. #4
    خیر ! روش Merge وقتی جواب می ده که هر دو تا عنصر ( آرایه یا فایل یا هر چیز دیگه ) مرتب باشند. در اینجا قسمت دوم فایل مرتب نیست. اول باید برای اون قسمت یک فکری بکنیم و بعد بازسازی رو با روش Merge انجام بدیم.
    پیشنهاد من اینه که یکبار کل فایل رو پیمایش کنیم و مقادیر کد ترتیب ( که فایل ترتیبی بر اساس اون شکل می گیره ) و شماره رکوردها ( اندیس رکورد در فایل ) رو در بیاریم و با یک روش Sort که فکر می کنم بهترین روش در این حالت Insertion Sort است در یک Linked List ( و یا یک آرایه در صورت استفاده از روشهای دیگر Sort ) مرتب سازی را انجام دهیم. و سپس بر اساس این لیست مرتب شده از فایل اصلی رکوردها را با SEEK بخوانیم و در جای خودشان ثبت کنیم.
    ثبت در فایل موقت منطقی تره اما اگر محدودیت استفاده از فقط یک فایل داریم می توانی از همان فایل استفاده کنی و حتی نه از آخر فایل. ( نکته در مورد آخر فایل این است که سایز فایل بزرگ غیر واقعی می شود و چطور می شود به مقدار اصلی برش گرداند؟ هر ابزار برنامه نویسی این امکان را نمی دهد.)
    به عنوان مثال فرض کن که رکورد 1 باید از رکوردهای جدید باشد. یعنی باید رکورد اول جابجا شود. در این حالت باید جای رکورد اول و مثلا 25010 را با هم عوض کنی. توجه داشته باشید که در لیست مرتب شده هم باید اندیس رکورد 1 سابق ( که الان به مکان 25010 منتقل شده ) اصلاح شود.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •