我已成功实现了一个使用两种常见数据结构的java程序:a Tree和a Stack以及允许用户输入树节点ID并获取与其父节点相关的信息的接口.您可以在我的GitHub src上查看此程序的最新版本
背景
我写的这个临时程序用于通过比较文件中的数据来研究数百个生物体中基因流的演变:FeatureIDs = Stringprimitives(更进一步将这些列在第一列中列为"ATM-0000011","ATM-0000012"依此类推),并且由与树中特定节点的存在或不存在相关联的分数组成,这些是double基元.
以下是数据文件的外观:
"FeatureID","112","115","120","119","124",...//this line has all tree node IDs
"ATM-0000011",2.213e-03,1.249e-03,7.8e-04,9.32e-04,1.472e-03,... //scores on these lines
"ATM-0000012",2.213e-03,1.249e-03,7.8e-04,9.32e-04,1.472e-03,...//correspond to node ID
"ATM-0000013",0.94,1.249e-03,7.8e-04,9.32e-04,1.472e-03,...//order in the first line
... //~30000 lines later
"ATM-0036186",0.94,0.96,0.97,0.95,0.95,...
Run Code Online (Sandbox Code Playgroud)
问题
以前,仅仅从数据文件中创建双打的二维数组就足够了(数组排除了文件中的第一行和FeatureID,因为它们是字符串),然后使用2D数组进行double堆栈.将根据用户输入和确定的父节点和子节点进行堆栈Tree.
然后,父和子堆栈中的数据将同时弹出(从而确保比较相同的FeatureID而不必在DS中包含该数据)并根据它们是否满足定义的值来比较它们的值条件(即,如果两个值都> = 0.75).如果他们这样做,计数器会增加.比较完成后(堆栈为空),程序将返回计数.
现在我想做的而不仅仅是计算,是制作一个符合比较标准的列表.因此,我没有返回表示节点A和节点B之间有4100个FeatureID符合条件的计数器,而是希望列出Strings满足在节点A和节点B之间进行比较的标准的所有4100 FeatureID .我要保存以后列出的文件,但这里不关心.这意味着我可能不得不放弃之前运行良好的double2D阵列/ double堆栈方案.
问题
知道问题是什么,是否有一个聪明的解决方案,我可以在输入数据文件或我的代码中的某个地方(tlacMain.java)进行更改,而无需向进程添加更多数据?我只需要想法.