RangePermute 1.0.1
dotnet add package RangePermute --version 1.0.1
NuGet\Install-Package RangePermute -Version 1.0.1
<PackageReference Include="RangePermute" Version="1.0.1" />
paket add RangePermute --version 1.0.1
#r "nuget: RangePermute, 1.0.1"
// Install RangePermute as a Cake Addin
#addin nuget:?package=RangePermute&version=1.0.1
// Install RangePermute as a Cake Tool
#tool nuget:?package=RangePermute&version=1.0.1
RangePermute
Memory efficient psuedo-randomly permuted enumerator for C#/.NET to enumerate gigantic ranges.
Say you want to generate a random permutation of numbers in range [0-2^50), without duplicates. Naive approach to get decent pseudo-random permutations would need prohibitively large amount of memory. This library can generate such enumerations using constant memory, and is suitable for Linq-style consumption.
With UInt64, currently we can support 2^64. Can easily be modified to support range up-to 2^128. Internals are 128-bit already.
using RangePermute;
...
foreach(var idx in RangeEnumerable.Range(100000000))
{
// do something with idx
// idx will be between 0 (inclusive) and 100000000 (exlusive)
...
}
Relevant reading:
- Luby, Michael, and Charles Rackoff. "How to Construct Pseudorandom Permutations from Pseudorandom Functions." SIAM Journal on Computing, vol. 17, no. 2, 1988, pp. 373–386.
- Black, John, and Phillip Rogaway. "Ciphers with Arbitrary Finite Domains." The Cryptographers Track at the Rsa Conference, 2002. [http://web.cs.ucdavis.edu/~rogaway/papers/subset.pdf]
Credits
Pretty much a C# port of https://pypi.python.org/pypi/shuffled/ .
Product | Versions |
---|---|
.NET | net5.0 net5.0-windows net6.0 net6.0-android net6.0-ios net6.0-maccatalyst net6.0-macos net6.0-tvos net6.0-windows net7.0 net7.0-android net7.0-ios net7.0-maccatalyst net7.0-macos net7.0-tvos net7.0-windows |
.NET Core | netcoreapp2.1 netcoreapp2.2 netcoreapp3.0 netcoreapp3.1 |
.NET Framework | net40 net403 net45 net451 net452 net46 net461 net462 net463 net47 net471 net472 net48 net481 |
-
.NETCoreApp 2.1
- No dependencies.
-
.NETFramework 4.0
- No dependencies.
-
.NETFramework 4.5
- No dependencies.
-
.NETFramework 4.6
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
First release.