سوال ۸

در این سوال شما بایستی کاری شبیه به C++ در تخصیص حافظه و آزاد کردن حافظه از Heap انجام دهید. فرض کنید آرایه‌ی $a$ از نوع int که بسیار بزرگ است وجود دارد. در این سوال شما بایستی توابع زیر را پیاده سازی کنید: دقت کنید همه‌ی توابع باید از ${\cal O}(1)$ باشند.

بعنوان یک مثال از نحوه‌ی استفاده از این توابع می‌توان نوشت:

intialize();
int *c=allocateMemory(-3, -2);
int *b=allocateMemory(0, n);
c[-3]=5;
for (int i=0; i<n; i++)
     b[i]=i;
freeMemory(b);
int *d=allocateMemory(-3, -3);
freeMemory(d);
freeMemory(c);

فرض کنید که آرایه‌ها به عکس ترتیبی که ساخته می‌شوند خالی می‌شوند یعنی اگر آرایه‌ی $c$ زودتر از $b$ ساخته شده باشد، $b$ زودتر از $c$ از بین می‌رود. شما برای پیاده‌سازی توابع فوق به غیر از آرایه‌ی $a$ تنها می‌توانید از ${\cal O}(1)$ حافظه‌ی اضافی استفاده کنید. در ضمن در هر لحظه اگر جمعاً $m$ تا آرایه allocate شده وجود داشته باشد که این آرایه‌ها جمعاً $n$ خانه‌ی allocate شده دارند شما می‌توانید از ${\cal O}(m+n)$ تا از خانه‌های آرایه‌ی $a$ استفاده کرده باشید.