Iki ortak veri yapıları kullanan bir java programı başarıyla uyguladım: bir kullanıcı bir ağaç düğümü KIMLIğI girip bir ağaç düğüm KIMLIĞI girmesine ve ilgili bilgi almak için bir arabirim ile birlikte bir ve bir Stack
ebeveynine. Burada bu programın son sürümü bakabilirsiniz at my GitHub src for this programjava
Arkaplan
Ben oluşan bir dosyadaki verileri karşılaştırarak organizmaların genelinde yüzlerce gen akışının evrimini incelemek için kullanılır yazdığı bu ad hoc programı of: FeatureIDs = String
ilkel (bunlar aşağı doğru ilk sütunda "ATM-0000011"
, "ATM-0000012"
, vb. olarak listelenir) ve ağaçtaki belirli bir düğümdeki varlık veya yokluğu ile ilişkili puanlardan oluşur ve bunlar double
ilkel. İşte
"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,...
Sorun
Daha önce, dizi (sadece veri dosyasından çiftlerde bir 2D dizi yapmak için yeterli iyiydi dosyadaki ilk satırı ve FeatureID'lerini, Dizeler olduğu için hariç tutuyor) ve 2B dizisini kullanarak double
yığınlarını oluşturuyor. Yığınlar, kullanıcı girişi ve Tree
tarafından belirlenen ana ve çocuk düğümleri için yapılacaktır.
Ebeveyn ve çocuk yığınlarındaki veriler aynı anda atılır (böylece, bu özelliklerin DS'ye bu verileri dahil etmeden aynı FeatureID'lerin karşılaştırıldığından emin olun) ve bunların değerlerine göre değerleri karşılaştırılır. tanımlı bir koşulla karşılaştılar (örneğin, eğer her iki değer de> = 0.75). Yaptılarsa, bir sayaç artırılacaktı. Karşılaştırmalar bittiğinde (yığınlar boştu) program sayımı/sayıları döndürürdü.
Şimdi onun yerine sadece sayma ne yapmak istediğini, FeatureIDs karşılaştırma kriterine uygun olan bir liste (ler) yapmaktır. Yani, ölçütleri karşılayan düğüm A ve düğüm B arasında 4100 FeatureIDs olduğunu söyleyen sayacı döndürmek yerine, düğüm A ve düğüm B arasında karşılaştırılan ölçütleri karşılayan tüm 4100 FeatureID Strings
listesini istiyorum. Bu listeyi daha sonra bir dosya olarak kaydedin ama bu endişe verici değil. Bu, daha önce çok iyi çalışmış olan double
2B dizi/double
yığın şemasını muhtemelen terk etmem gerektiği anlamına gelir.
Soru sorunun ne olduğunu bilerek, ya da bir yerde benim kod (tlacMain.java) içinde olmadan giriş veri dosyada değişiklik yapabilir bu soruna bir akıllı düzeltme var sürece daha fazla veri eklemek? Sadece fikirlere ihtiyacım var. Sorunuzu doğru anlamak eğer
Özellik kimliklerini sayıyorsunuz, neden bunları ArrayList gibi bir Liste yapısına eklemiyorsunuz? –
(bu aynı zamanda @ felixbr için de geçerlidir), bu yaklaşımdaki problem, karşılaştırmalar için kullanılan yöntemlerin bir FeatureID bilgisi içermeyen tipi bir üst ve alt yığınını almasıdır. Github'daki kodumdaki uygulamaya bakın https://github.com/asobin/sobin/blob/master/PhyloTLaC/src/tlacMain.java#L253 –