diff options
Diffstat (limited to 'notes/notes2.txt')
-rw-r--r-- | notes/notes2.txt | 70 |
1 files changed, 0 insertions, 70 deletions
diff --git a/notes/notes2.txt b/notes/notes2.txt deleted file mode 100644 index 3fb551b7a..000000000 --- a/notes/notes2.txt +++ /dev/null @@ -1,70 +0,0 @@ -How to do a B-Tree insert: - - insert(data){ - create a new cursor - move cursor to the entry nearest data - if( cursor.key == keyof(data) ){ - replace cursor.data with dataof(data) - return - } - childpg = NULL - add_to_page(cursor, data+childpg) - delete the cursor - } - - add_to_page(cursor, data+childpg ){ - childpg->parent = cursor.page - if( data+childpg fits on cursor.page ){ - insert data+childpg at cursor - return - } - if( page==root ){ - split page+(data+childpg) into newpage1, center, newpage2 - cursor.page = &newpage1 + center + &newpage2; - newpage1->parent = cursor.page - newpage2->parent = cursor.page - return - } - if( move_some_data_left || move_some_data_right ){ - insert data+childpg at cursor - return - } - split page+(data+childpg) into page, center, newpage - newpage->parent = page->parent - move cursor to insertion point of center in parent page. - add_to_page(cursor, center, (newpage)); - } - -How to do a B-Tree delete: - - delete(entry){ - if( entry is not a leaf ){ - p = predecessor of entry - // note: if entry is not a leaf then p must - // exist and must be a leaf - free(entry.overflowptr) - resize entry so that is is big enough to hold p.payload - entry.payload = p.payload - entry.overflowptr = p.overflowptr - p.overflowptr = NULL - delete(p) - return - } - unlink entry from its page - refill(page containing entry) - } - - refill(page){ - if( page is more than half full ) return - if( page is the root and contains no entries ){ - copy the one child page into this page thus reducing - the height of the tree by one. - return - } - if( able to merge page with neighbors ){ - do the merge - refill(parent page) - return - } - borrow entrys from neighbors - } |