static void Main(string[] args) { var intMapper = new EqualityComparerMapper <long>(EqualityComparer <long> .Default); var nullableIntMapper = new EqualityComparerMapper <long?>(EqualityComparer <long?> .Default); var memoizer = new Memoizer <long, long?>(intMapper, nullableIntMapper); long fast_fib(long n) { var existingSolution = memoizer.GetOutput(n); var returnValue = (n, existingSolution.HasValue) switch { (0, _) => 0, (1, _) => 1, (_, false) => fast_fib(n - 1) + fast_fib(n - 2), (_, true) => existingSolution.Value }; memoizer.Memoize(n, returnValue); return(returnValue); } for (int i = 0; i < 92; i++) { Console.WriteLine($"Fibonacci number {i + 1} is {fast_fib(i)}"); } }
public TermDatabase() { StringMapper = new StringMapper(); TermMapper = new EqualityComparerMapper <Term>(new IntegerMapperTermEqualityComparer()); LabelToTerm = new Dictionary <ulong, HashSet <Term> >(); CurrentFrame = new Frame(this); _writer = new Lazy <TermDatabaseWriter>(() => new TermDatabaseWriter(this)); _reader = new Lazy <TermDatabaseReader>(() => new TermDatabaseReader(this)); }
/// <summary> /// Builds a buffer based on the given triangles for the given scene graph /// </summary> /// <param name="sceneGraph">The scene graph for the entire world model.</param> /// <param name="triangleAssertionsToRender">The triangles for which a buffer needs to be constructed.</param> public TriangleBuffer(SceneGraph sceneGraph, BufferManager bufferManager, IEnumerable <Core.Scene.Triangle> triangleAssertionsToRender, ILogger logger, IShaderCompiler shaderCompiler, ITextureLoader textureLoader) : base() { _logger = logger; _shaderCompiler = shaderCompiler; _textureLoader = textureLoader; _sceneGraph = sceneGraph; _bufferManager = bufferManager; _triangleAssertionsToRender = triangleAssertionsToRender.ToArray(); _vertexBuffer = new Lazy <float[]>(() => new float[_triangleAssertionsToRender.Length * VerticesPerTriangle * ComponentsPerVertex]); _vertexIndexBuffer = new Lazy <uint[]>(() => new uint[_triangleAssertionsToRender.Length * VerticesPerTriangle]); _textureObjectIdToShaderIndex = new EqualityComparerMapper <ulong>(EqualityComparer <ulong> .Default); BuildBuffer(); }
public MemoizerTests() { _outputMapper = new EqualityComparerMapper <double>(EqualityComparer <double> .Default); _inputMapper = new EqualityComparerMapper <int>(EqualityComparer <int> .Default); _memoizer = new Memoizer <int, double>(_inputMapper, _outputMapper); }