Generic linear-time sorting
Project description
discer
Generic linear-time sorting and partitioning
Based on this paper by Fritz Henglein.
Warning before you start using this library
The standard libraries sorted
function has linear-time sorting in the average case (Timsort) and is way more optimized than this library and will almost certainly be faster than any sorting done with this library.
discer.relations
contains a Relation
type that represents the Order
and Equiv
types from the paper along with a few of standard relations from the paper.
discer.grouping
and discer.sorting
contain the respective Equiv
and Order
based from functions from the paper.
Future work
Not in any particular order:
- Better README and docs
- Add some tests
- Optimize
- Lazy evaluation over the key/pair list to reduces passes on it
- Defer to
sorted
when it will likely (or definitely) run in linear time - The paper includes some optimizations not included
- Generic Multiset Programming may also contain further optimizations
- Setup
SumL
andProductL
to useTypeVarTuple
- Functions to extend Relations
list :: Relation a -> Relation [a]
tuple :: Relation a -> Relation Tuple[a, ...]
dict :: Relation a -> Relation Dict[k, a]
- Refactor
sdisc
anddisc
, the functions are basically exactly the same except how they deal withNatural
- Add compatibility for at least Python 3.8+
References
Henglein, Fritz. "Generic top-down discrimination for sorting and partitioning in linear time." Journal of Functional Programming 22.3 (2012): 300-374.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file discer-0.1.1.tar.gz
.
File metadata
- Download URL: discer-0.1.1.tar.gz
- Upload date:
- Size: 5.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6541ede377cba09054e0ca8a17531b444b53a36c36e9f472fc346cc0cfb955fa |
|
MD5 | 49bfa85bad55080a642c7dda86a30b90 |
|
BLAKE2b-256 | f148c6cfa0b70f462a535ad2e810eb031c5b527f4cdf1c201e90af2c880929a7 |
File details
Details for the file discer-0.1.1-py3-none-any.whl
.
File metadata
- Download URL: discer-0.1.1-py3-none-any.whl
- Upload date:
- Size: 6.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 11cfcd60fb572662be0e04dbc5fddd1b40cbdc4dfc2bd5fb2ad1349ed2dc881e |
|
MD5 | 34941e7404101f900a950b5d49b5c6cf |
|
BLAKE2b-256 | ccdcc3f72916fd599eabffc09066cf6deefd7b730a4874c7f2147714bf11f81a |