Skip to content

MarEdv/wpc-week7

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
src
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Weekly Programming Challenge #7

Jamis Buck publishes programming challenges on his blog at https://medium.com/@jamis/. This is my submission for week 7. This time it's all about B+trees. I managed to (almost) complete normal mode, which includes

  • A basic B+ tree with configurable arity (children per node).
  • The insertion algorithm, allowing you to add a new key/value pair to the tree.
  • The search algorithm, allowing you to find the value for a named key.

I also included Configurable key and value data types from the list of Hard Mode.

The project is created using Holy Project (https://github.com/yogsototh/holy-project) which is a project generator for Haskell using Cabal.

Build, run and test

There is no executable, only the package and unit tests

Build:

cabal build

Test:

cabal test

Usage

The tree consists of the type (Ord key) => BplusTree key value with one type parameter for keys and one for values. The available construcors are

    Node {
      arity :: Int
      , keys :: [key]
      , children :: [BplusTree key value]
      , sibling :: (Maybe (BplusTree key value))
    }

and

    Leaf {
       arity :: Int
       , keyValues :: [(key, value)]
       , sibling :: (Maybe (BplusTree key value))
    }

Each constructor takes the arity of the tree. This is needed when creating the root node. Later this is handled by the insert function.

Insert a mapping from key 4 to value '4' in an empty tree with an arity of 3, like this: insert 4 '4' (createEmptyRoot 3)

Finding a Leaf that contains the mapping for a key like this: searchNode 4 tree where tree is a BplusTree.

About

My solution to Jamis Buck's Weekly Programming Challenge #7

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published