Safe Haskell | Safe-Inferred |
---|---|
Language | GHC2021 |
Perf.BigO
Description
Order of complexity) calculations.
Synopsis
- data O
- olist :: [O]
- promote :: Order Double -> Double -> Double
- promote1 :: Order Double -> Double
- promote_ :: [Double -> Double]
- demote :: O -> Double -> Double -> Order Double
- demote1 :: O -> Double -> Order Double
- spectrum :: Double -> Double -> Order Double
- newtype Order a = Order {
- factors :: [a]
- bigO :: (Ord a, Num a) => Order a -> (O, a)
- runtime :: Order Double -> Double
- data BigOrder a = BigOrder {}
- fromOrder :: Order Double -> BigOrder Double
- toOrder :: BigOrder Double -> Order Double
- order :: Num a => O -> a -> Order a
- diffs :: [Double] -> [Double] -> [[Double]]
- bestO :: [Double] -> [Double] -> O
- estO :: [Double] -> [Double] -> (Order Double, [Double])
- estOs :: [Double] -> [Double] -> [Order Double]
- makeNs :: Int -> Double -> Int -> [Int]
- data OrderOptions = OrderOptions {}
- defaultOrderOptions :: OrderOptions
- parseOrderOptions :: OrderOptions -> Parser OrderOptions
Documentation
order type
Instances
Enum O Source # | |
Generic O Source # | |
Show O Source # | |
Eq O Source # | |
Ord O Source # | |
type Rep O Source # | |
Defined in Perf.BigO type Rep O = D1 ('MetaData "O" "Perf.BigO" "perf-0.14.0.2-H75Z2hMBQeo3kcFBvLiyTU" 'False) (((C1 ('MetaCons "N3" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "N2" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "N32" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "NLogN" 'PrefixI 'False) (U1 :: Type -> Type))) :+: ((C1 ('MetaCons "N1" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "N12" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "LogN" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "N0" 'PrefixI 'False) (U1 :: Type -> Type)))) |
promote :: Order Double -> Double -> Double Source #
Calculate the expected performance measure
>>>
promote (order N2 1) 10
100.0
promote1 :: Order Double -> Double Source #
Calculate the expected performance measure per n
>>>
promote (order N2 1) 10
100.0
promote_ :: [Double -> Double] Source #
functions to compute performance measure
>>>
fmap ($ 0) promote_
[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]
>>>
fmap ($ 1) promote_
[1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0]
Ordering makes sense around N=10
>>>
fmap ($ 10) promote_
[1000.0,100.0,31.622776601683793,23.02585092994046,10.0,3.1622776601683795,2.302585092994046,1.0]
Having NP may cause big num problems
>>>
fmap ($ 1000) promote_
[1.0e9,1000000.0,31622.776601683792,6907.755278982137,1000.0,31.622776601683793,6.907755278982137,1.0]
demote :: O -> Double -> Double -> Order Double Source #
Calculate an Order from a given O, an n, and a total performance measurement
A measurement of 1e6 for n=1000 with an order of N2 is:
>>>
demote N2 1000 1000000
Order {factors = [0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0]}
promote (demote N2 n m) n m == m
demote1 :: O -> Double -> Order Double Source #
Calculate an Order from a measure, and an O
>>>
demote1 N2 1000
Order {factors = [0.0,1000.0,0.0,0.0,0.0,0.0,0.0,0.0]}
demote1 N2 m == demote o 1 m
spectrum :: Double -> Double -> Order Double Source #
The factor for each O given an n, and a measurement.
>>>
spectrum 100 10000
Order {factors = [1.0e-2,1.0,10.0,21.71472409516259,100.0,1000.0,2171.4724095162587,10000.0]}
a set of factors for each order, which represents a full Order specification.
bigO :: (Ord a, Num a) => Order a -> (O, a) Source #
find the dominant order, and it's factor
>>>
bigO o
(N2,1.0)
runtime :: Order Double -> Double Source #
compute the runtime component of an Order, defined as the difference between the dominant order and the total for a single run.
>>>
runtime o
100.0
A set of factors consisting of the dominant order, the dominant order factor and a constant factor
Instances
Functor BigOrder Source # | |
Generic (BigOrder a) Source # | |
Show a => Show (BigOrder a) Source # | |
Eq a => Eq (BigOrder a) Source # | |
Ord a => Ord (BigOrder a) Source # | |
Pretty (BigOrder Double) Source # | |
type Rep (BigOrder a) Source # | |
Defined in Perf.BigO type Rep (BigOrder a) = D1 ('MetaData "BigOrder" "Perf.BigO" "perf-0.14.0.2-H75Z2hMBQeo3kcFBvLiyTU" 'False) (C1 ('MetaCons "BigOrder" 'PrefixI 'True) (S1 ('MetaSel ('Just "bigOrder") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 O) :*: S1 ('MetaSel ('Just "bigFactor") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a))) |
fromOrder :: Order Double -> BigOrder Double Source #
compute the BigOrder
>>>
fromOrder o
BigOrder {bigOrder = N2, bigFactor = 1.0}
toOrder :: BigOrder Double -> Order Double Source #
convert a BigOrder to an Order.
toOrder . fromOrder is not a round trip iso.
>>>
toOrder (fromOrder o)
Order {factors = [0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0]}
order :: Num a => O -> a -> Order a Source #
create an Order
>>>
order N2 1
Order {factors = [0,1,0,0,0,0,0,0]}
diffs :: [Double] -> [Double] -> [[Double]] Source #
The errors for a list of n's and measurements, based on the spectrum of the last measurement.
bestO :: [Double] -> [Double] -> O Source #
minimum error order for a list of measurements
>>>
bestO ns ms
N1
estO :: [Double] -> [Double] -> (Order Double, [Double]) Source #
fit the best order for the last measurement and return it, and the error terms for the measurements
>>>
estO ns ms
(Order {factors = [0.0,0.0,0.0,0.0,102.90746947660953,0.0,0.0,0.0]},[2702.0925305233905,2446.9253052339045,-301.7469476609531,-10317.469476609534,0.0])
estOs :: [Double] -> [Double] -> [Order Double] Source #
fit orders from the last measurement to the first, using the residuals at each step.
>>>
estOs ns ms
[Order {factors = [0.0,0.0,0.0,0.0,102.90746947660953,0.0,0.0,0.0]},Order {factors = [0.0,0.0,-0.32626703235351473,0.0,0.0,0.0,0.0,0.0]},Order {factors = [0.0,0.0,0.0,0.0,0.0,0.0,0.0,24.520084692561625]},Order {factors = [0.0,0.0,0.0,0.0,0.0,0.0,0.0,2432.722690017952]},Order {factors = [0.0,0.0,0.0,0.0,0.0,0.0,0.0,245.1760228452299]}]
data OrderOptions Source #
Constructors
OrderOptions | |
Instances
Generic OrderOptions Source # | |
Show OrderOptions Source # | |
Defined in Perf.BigO Methods showsPrec :: Int -> OrderOptions -> ShowS # show :: OrderOptions -> String # showList :: [OrderOptions] -> ShowS # | |
Eq OrderOptions Source # | |
Defined in Perf.BigO | |
type Rep OrderOptions Source # | |
Defined in Perf.BigO type Rep OrderOptions = D1 ('MetaData "OrderOptions" "Perf.BigO" "perf-0.14.0.2-H75Z2hMBQeo3kcFBvLiyTU" 'False) (C1 ('MetaCons "OrderOptions" 'PrefixI 'True) (S1 ('MetaSel ('Just "doOrder") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Bool) :*: (S1 ('MetaSel ('Just "orderLow") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int) :*: S1 ('MetaSel ('Just "orderDivisor") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Double)))) |