예제 #1
0
        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));
 }
예제 #3
0
        /// <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();
        }
예제 #4
0
 public MemoizerTests()
 {
     _outputMapper = new EqualityComparerMapper <double>(EqualityComparer <double> .Default);
     _inputMapper  = new EqualityComparerMapper <int>(EqualityComparer <int> .Default);
     _memoizer     = new Memoizer <int, double>(_inputMapper, _outputMapper);
 }