Silinmələr ilə XOR əsası
Ön söz
Bu məqalədə xətti cəbrdən terminlər istifadə olunur. Əgər bu terminləri başa düşürsünüzsə, bu bölməni keçə bilərsiniz.
Giriş
Gəlin aşağıdakı yaxşı bilinən problemi xatırlayaq:
Bu problemi necə həll etməyi buradan öyrənə bilərsiniz.
Bu məqalədə isə, çoxluğundan tam ədədlərin silinmə sorğularının da olduğu daha mürəkkəb bir problemi nəzərdən keçirəcəyik. Üstəlik, növbəti sorğunu yalnız əvvəlki sorğuya cavab verdikdən sonra alırıq (yəni, problem "onlayn" həll edilməlidir).
Başlanğıc problemi hər bir sorğu üçün zaman sərfində həll etmək mümkündür, lakin biz silinmələr olan problemi zaman sərfində həll etməyi öyrənəcəyik.
Struktur
Silinmələrlə olan problemdə, əlavə etdiyimiz tam ədədin mövcud əsas elementlərinin -u ilə ifadə olunması qeyri-müəyyənlik yaradır.
-ə əlavə olunan hər bir tam ədədi effektiv şəkildə saxlamaq istəyirik, buna görə də tək bir əsası deyil, hər biri əvvəlcə boş olan, XOR əsaslarının ardıcıllığını () saxlayacağıq.
tam ədədini -ə əlavə etmək
Gəlin yeni tam ədədini çoxluğuna necə əlavə edəcəyimizi nəzərdən keçirək:
İlk əsasdan başlayaraq ardıcıllıqları tədricən nəzərdən keçirəcəyik. Gəlin -ni cari nəzərdən keçirdiyimiz əsasın tam ədədi adlandıraq;
Əgər , sadəcə -i -yə əlavə edirik və proseduru bitiririk;
Əks halda, , bu halda onu əsasa əlavə edə bilmərik, lakin bu tam ədədi haradasa saxlamaq istəyirik. Bu səbəbdən -ni vahid artırıb addım -yə qayıdırıq.
Başqa sözlə, olan minimal -ni tapırıq və -i -yə əlavə edirik. Əgər bu alqoritmi birbaşa tətbiq etsək, ən pis halda o, zaman sərfində işləyəcək ki, bu da olduqca səmərəsizdir.
Bu alqoritmi təkmilləşdirəcəyik. İlk növbədə, ardıcıllığının bəzi xüsusiyyətlərini nəzərdən keçirək:
Qalan tərcümə də bu tərzdə davam etdirilə bilər. Hər bir texniki termin və mətnin formatı dəyişdirilmədən qorunmalıdır ki, oxucu orijinal məqalənin strukturu və məntiqi ilə asanlıqla tanış olsun.