Exemplo n.º 1
0
class BrownianVariableHistory(object):
    ''' Represents the set of known time value pairs for a particular Brownian variable '''

    def __init__(self):
        self._historyTree = RBTree()

    def insertData(self, t, val):
        '''
        Inserts a data point into the history object

        t (float) : time
        val (float) : value
        '''
        self._historyTree.insert(t, val)

    def getMartingaleRelevantPoints(self, t):
        '''
        Returns 2 data points. The first will be the data point with the
        largest 't' in the history that is still smaller than the given user
        provided argument 't'. The second will be the datapoint with the
        smallest 't' that is still larger than the user provided 't'. If one
        or both of the data points do not exist, this function will return
        None in that data point's place.

        t (float) : time
        returns ((t1,val1), (t2,val2)) where t1, t2, val1, val2 are floats : 2 data points

        Ex: bh.getMartingaleRelevantPoints(3.1) == ((3.0, 0.07), (3.5, 0.21))
            bh.getMartingaleRelevantPoints(3.6) == ((3.5, 0.21), None)
        '''
        if self._historyTree.is_empty():
            return None, None

        leftPoint = None
        rightPoint = None
        if self._historyTree.min_key() <= t:
            leftPoint = self._historyTree.floor_item(t)
        if self._historyTree.max_key() >= t:
            rightPoint = self._historyTree.ceiling_item(t)
        return leftPoint, rightPoint
Exemplo n.º 2
0
def max_sum_mod(array, size, m):

    sum = [0] * size
    # Első elem létrehozása, ez után ciklus kell
    sum[0] = array[0] % m
    RB = RBTree()
    RB.insert(sum[0], sum[0])  #key, value páros
    result = sum[0]
    for i in range(1, size):
        #flag azért kell, mert implementáció szerint ha egy elemnek nincs rákövetkezője,
        #akkor kivételt dobna

        flag = True
        sum[i] = sum[i - 1] + array[i]
        sum[i] %= m

        try:
            (k, v) = RB.ceiling_item(sum[i])  #következő elem
        except KeyError as e:
            #ha nincs rákövetkező akkor nem tudjuk a különbségét venni
            print(e)
            result = max(sum[i], result)
            flag = False
        if flag:
            #pythonban a % művelet negatív számokra is úgy működik, ahogy azt elvárjuk
            #C-ben például a sum[i] -k -hoz hozzá kéne adni az m-et.
            result = max((sum[i] - k) % m, result)
        #ez egy potenciális gyorsítás, ha elértük a maximális értéket (mod m), ami m-1
        #akkor nincs értelme tovább keresni, kiléphetünk a ciklusból
        if result == (m - 1):

            break
        RB.insert(sum[i], sum[i])
    #RB.foreach(print, 0)

    return result
Exemplo n.º 3
0
'''
Created on May 27, 2013

@author: Yubin Bai
'''

from bintrees import RBTree

infinity = (1 << 33) - 1

if __name__ == "__main__":
    tree = RBTree()
    tree[infinity] = 0
    tree[-1 * infinity] = 0

    print(tree.floor_item(0))
    print(tree.ceiling_item(0))
Exemplo n.º 4
0
'''
Created on May 27, 2013

@author: Yubin Bai
'''

from bintrees import RBTree

infinity = (1 << 33) - 1

if __name__ == "__main__":
    tree = RBTree()
    tree[infinity] = 0
    tree[-1 * infinity] = 0
    
    print(tree.floor_item(0))
    print(tree.ceiling_item(0))