我已经"成功"实施了一个非重组三叉树来定价某些固定收益衍生品.(如下图所示 - 但有三个分支没有重新连接)
不幸的是,事实证明我可以使用的节点数量受可用内存的严重限制.如果我构建一个具有20个时间步长的树,则会产生3 ^ 19个节点(因此1,1亿个节点)
保存每个时间步的节点,List<Node>并将这些数组存储在一个Dictionary<double,List<Node>>
每个节点都通过实例化new Node(...).我也通过实例化每个列表和字典new Class() 也许这是我的错误的来源.
也System.OutOfMemoryException不会抛出因为Dictionary/List-Object变大(通常就是这种情况)但因为我似乎有太多的节点 - 一段时间后new Node(...)无法分配任何进一步的内存.最终,我认为2GB最大List-Capacity也将启动 - 看看List如何随着每个时间步长呈指数级增长.
也许我的数据结构太浪费或者不适合手头的任务.
一种可能的解决方案是将树保存到文本文件中,从而完全避免内存问题.然而,这需要一个巨大的解决方法.
编辑: 添加更多背景.我需要树来定价路径依赖的产品.这意味着不幸的是我将不得不访问所有节点.在树木建成之后,我从树叶开始并及时倒退以确定价格.我也只生成了我需要的节点.
编辑2:
虽然我已经给出了一些主题,但也考虑了各种反应.可能是我只需要将相应的树级别序列化到硬盘驱动器.所以基本上 - 我创建一个时间步骤(List<Node>)将其写入磁盘等.稍后当我从叶子开始 - 我将只需要反向加载它.
谷歌和stackoverflow搜索无法帮助我,我别无选择,只能向你们寻求帮助.
我想使用一个向量数组 - 我知道这个数组只需要包含两个向量.从而
vector<double> testVect[1];
Run Code Online (Sandbox Code Playgroud)
现在,当我想将Element添加到我使用的数组中包含的第一个向量时
testVect[0].push_back(0);
Run Code Online (Sandbox Code Playgroud)
到目前为止一切似乎都没问题 - 不幸的是,在第一个向量中添加一个元素也会在第二个向量中添加相同的元素(在本例中为0).
有人能告诉我这种行为的原因吗?(请) - 也许是一种解决方法.目前我必须使用Visual Studio 6(雇主不会安装新的编译器 - 我已经惹恼了我的同事:D
我在c#中实现了一些复杂且计算量很大的函数.要在Excel中使用它,我已经通过Excel-DNA创建了Excel-AddIn.
现在,当我在Excel中调用该函数并开始输入值时,它甚至在我完成所有输入之前就开始计算.更重要的是,当我单击进入单元格并更改某些输入时,该功能也会重新计算.通常我不介意.但由于性能缓慢,它变成了一场苦难
有没有办法抑制这种行为?(将计算设置为手动似乎不起作用)基本上我希望Excel-DNA公式仅在按下F9时(重新)计算.
如果有人有另一种语言的解决方案,我很乐意将其作为灵感并将其移植到c#.
我已经对stackoverflow进行了一些搜索,据我所知,有很多方法可以在C++中使用数据库.不幸的是,在工作中我的工具非常有限.我只使用visual studio C++ 6,甚至没有提升(尽管我已经学会了解决这个问题) - 我认为我只能使用VS C++ 6收集的标准发行版.
现在我的代码生成了大量数据,我想将它们存储在一个简单的数据库(如MS Access数据库)中.我可以使用哪些工具?
我的另一个方法是通过struct和vectors/arrays创建一个类似数据库的对象.
我也安装了Office 2010 - 也许我可以以某种方式使用Access?
计算速度也发挥作用 - 越快越好.
另一件重要的事情是:我工作的电脑不是开放式客户端.因此我无法安装任何新软件.下载和移动文件有效.基本上我必须能够通过将文件移动到所需的文件夹来安装该工具.
如果问题令人困惑或不够详细,请告诉我,我会尽我所能来纠正这种情况.
提前为您提供帮助:)