2016-03-30 21 views
0

Aşağıdaki değerlere sahip olan veri akışım var. Saklama için maksimum sayıda benzersiz değerle birlikte (ör. 50,22,12).
Yukarıdaki değerlerin ve alt değerlerin sayısını dikkate alacak bir sistem tasarlamalıyım. Maksimum değerden daha fazla sayıda değer varsa, gerçek değer deposu ETC'yi depolamak yerine.İç içe geçmiş değerler ve değer sayısı için hangi veri yapısı en uygun?

Ülke ve olaylar
Devletler ve olaylar
Şehirler deyince ve tanımlı zaman aralığı gereksinimi de olaylar

numarasındaki sayımı alt tip sayımları ile birlikte tüm sayımları hesaplamaktır. , ör. Yani bu sistemden çıkış değerleri olacaktır.

Ülke A 435, Devletler B 264, Şehir C 300
Ülke B 123, Devletler B 825, Şehir C 321
Ülke A 153, Devletler B 122, İl C 534

Sistemim aşağıdaki kısıtlamalar zorlar .
1. Değerleri saklamak ve almak için herhangi bir veritabanı sistemini kullanamazsınız.
2. Hız ve hız kullanımı için bunun bellekte olması gerekir (bu nedenle depolanan maksimum değerler üzerinde sınırlama)
3. Değerler belirli aralıklarla temizlenir.
4. Bu değerler yuvalanmıştır, ayrı ayrı 3 alanı takip etmek için ayrı tablolar kullanamıyorum.

İç içe geçmiş değerleri ve sayımları depolayan özel veri yapısını kullanmayı düşündüm. Tasarımın ardından başka hangi yollara ulaşabilirim. Hangi veri yapıları kullanılabilir? Benzer şeyler yapan mevcut örnekler var mı?

Not: Bu bir ev ödevi değildir, kendi başvurumu geliştiriyorum ve bu gereksinim için zarif bir çözüm tasarlama aşamasında takılıyorum. Bu sorunun çok genel veya StackOverflow için uygun olmadığını düşünüyorsanız, kapatmadan veya oylamadan önce bu soruyu sormak için hangi forumun kullanılması gerektiğini belirtin. Herhangi bir olumlu geribildirim takdir edildi.

sözde kod:

İşte
class Location { 
// local storage 
private val subLocationCounter = HashMap[Location, Long]; 

// method to add new location 
addLocation(Location loc) 
// method to get current count of locations 
getCounts() 
// method to get current count of locations values recursively 

} 
+0

Üzgünüz ama şartlar çok açık değildir. Uygulamayı düşündüğünüz özel veri yapısının sözde kodunu gösterebilirseniz, diğerleri daha iyi veri yapıları geliştirmenize veya önermenize yardımcı olabilir. –

+0

Zaman ayırdığınız için teşekkürler @AmnaAli. Özel veri yapmam için bir Harita olan basit bir sınıf Konumunu kullanmayı düşündüm. İç içe geçmiş Ülke -> Eyalet -> Şehir için artan Konum değerlerini oluşturmayı ve tutmayı planlıyorum.'' '' '' '' '' '' '' class class class {{}} {{}} {{{item}} {} // yöntemini kullanarak yinelemeli yerleri değerlerin geçerli saymak} '' ' – user300313

+0

orijinal yayınında kodlarını koymak Lütfen olsun yerlerin şimdiki sayım sonucuna varmak için // yöntemini yeni konumu // yöntemi eklemek için' düzenlemek '. – WhatsUp

cevap

0

senin "özyinelemeli veri yapısı" dır:

import scala.collection.mutable 

case class State(var count:Int = 0, cities:mutable.Map[String, Int] = mutable.Map()) 
case class Country(var count:Int = 0, states:mutable.Map[String, State] = mutable.Map()) 

val countries = mutable.Map[String, Country]() 

List(
    ("A", "B", "C"), 
    ("A", "B", "D"), 
    ("B", "B", "C") 
).foreach { 
    case (countryName, stateName, cityName) => 
    val country = countries.getOrElseUpdate(countryName, new Country) 
    val state = country.states.getOrElseUpdate(stateName, new State) 
    country.count += 1 
    state.count += 1 
    state.cities(cityName) = state.cities.getOrElse(cityName, 0) + 1 
} 

countries("A") 
countries("B") 

Sonuçlar:

res1: Country = Country(2,Map(B -> State(2,Map(D -> 1, C -> 1)))) 
res2: Country = Country(1,Map(B -> State(1,Map(C -> 1))))