WOLFRAM

"ExtensibleVector"

represents a dynamically extensible vector where the elements are general expressions.

Details

  • An extensible vector is useful for continuously appending and prepending elements, as well as for efficient element extraction and updating.
  • CreateDataStructure[ "ExtensibleVector"]create a new empty "ExtensibleVector"
    CreateDataStructure[ "ExtensibleVector",elems]create a new "ExtensibleVector"containing elems
    Typed[x,"ExtensibleVector"]give x the type "ExtensibleVector"
  • For a data structure of type "ExtensibleVector", the following operations can be used:
  • ds["Append",x]append x to dstime: O(1)
    ds["Copy"]return a copy of dstime: O(n)
    ds["Drop",i]drop the i^(th) part of dstime: O(n)
    ds["DropAll"]drop all the elements from dstime: O(n)
    ds["DropLast"]drop the last element of dstime: O(1)
    ds["Elements"]return a list of the elements of dstime: O(n)
    ds["EmptyQ"]True, if ds has no elementstime: O(1)
    ds["Fold",fun,init]apply fun to the elements of ds, starting with init, accumulating a resulttime: O(n)
    ds["Insert",x,i ]insert x into ds at position itime: O(1)
    ds["JoinBack",elems ]join elems to the back of dstime: O(nelems)
    ds["JoinFront",elems ]join elems to the front of dstime: O(nelems)
    ds["Length",x]the number of elements stored in dstime: O(1)
    ds["Part",i]give the i^(th) part of dstime: O(1)
    ds["Prepend",x]prepend x to dstime: O(1)
    ds["SetPart",i,elem]update the i^(th) part of dstime: O(1)
    ds["SwapPart",i,j]swap the i^(th) and j^(th) parts of dstime: O(1)
    ds["Visualization"]return a visualization of dstime: O(n)
  • The following functions are also supported:
  • dsi===dsjTrue, if dsi equals dsj
    ds["Part",i]=valset i^(th) element of ds to val
    FullForm[ds]full form of ds
    Information[ds]information about ds
    InputForm[ds]input form of ds
    Normal[ds]convert ds to a normal expression

Examples

open allclose all

Basic Examples  (2)Summary of the most common use cases

A new "ExtensibleVector" can be created with CreateDataStructure:

Out[1]=1

Elements can be appended:

Out[2]=2

Elements can be prepended:

Out[3]=3

Return the length:

Out[4]=4

Extract the first element:

Out[5]=5

Change an element:

Out[6]=6

The element has updated:

Out[7]=7

Return an expression version of ds:

Out[8]=8

It is fast to append:

A visualization of the data structure can be generated:

Out[2]=2

Sum all the elements:

Out[3]=3

Scope  (1)Survey of the scope of standard use cases

Information  (1)

A new "ExtensibleVector" can be created with CreateDataStructure:

Out[1]=1

Information about the data structure ds:

Out[2]=2

Applications  (11)Sample problems that can be solved with this function

Reverse  (1)

A simple function that carries out an in-place reverse of a "ExtensibleVector":

A sample data structure to use:

Reverse the elements:

Out[3]=3

Bubble Sort  (1)

Bubble sort is a simple sorting algorithm that is easy to code but typically has poor performance:

A sample data structure to use:

Sort the elements:

Out[3]=3

The data structure is sorted in place:

Out[4]=4

Insertion Sort  (1)

Insertion sort is a simple sorting algorithm that is easy to code and typically has poor performance for large arrays, but can be useful for small arrays:

A sample data structure to use:

Sort the elements:

Out[3]=3

The data structure is sorted in place:

Out[4]=4

Quicksort  (1)

Quicksort is an efficient sorting algorithm. This basic implementation uses nested functions:

A sample data structure to use:

Sort the elements:

Out[3]=3

The data structure is sorted in place:

Out[4]=4

Merge Sort  (1)

Merge sort is an efficient sorting algorithm. This is a simple implementation that uses a workspace:

A sample data structure to use:

Sort the elements:

Out[5]=5

The data structure is sorted in place:

Out[6]=6

Heapsort  (1)

Heapsort is an efficient sorting algorithm that works in place by constructing a heap:

A sample data structure to use:

The elements are sorted in place:

Out[4]=4

Timsort  (1)

Timsort is a hybrid and efficient sorting algorithm:

A sample data structure to use:

The elements are sorted in place:

Out[5]=5

FisherYates Shuffle  (1)

The FisherYates shuffle generates a random permutation of a finite sequence:

A sample array to use for the shuffle:

Apply the shuffle:

Out[3]=3

Palindrome  (1)

An array is a palindrome if it is symmetric around the middle:

This is not a palindrome:

Out[2]=2

This is a palindrome:

Out[3]=3

Quickselect  (1)

Quickselect is a selection algorithm related to the Quicksort algorithm. It returns the k^(th) smallest element in a list:

A sample data structure to use:

The third smallest element is 7:

Out[5]=5

Heap  (1)

A heap is a tree-based data structure where the value stored at children is smaller than that stored in their parents (for a min heap). It is commonly used to implement a priority queue and typically implemented with an array rather than a tree.

The following converts an array into a heap:

A sample data structure to use:

This converts the array into a heap; it is hard to see the heap property:

Out[7]=7

This function generates a tree:

A visualization makes it easier to see the min heap property:

Out[9]=9

Properties & Relations  (2)Properties of the function, and connections to other functions

"FixedArray"  (1)

Many algorithms that work for "ExtensibleVector" also work for "FixedArray".

"DynamicArray"  (1)

Many algorithms that work for "ExtensibleVector" also work for "DynamicArray".