bir grup var. 2 puanlık (xi,yi) (xj,yj) where xi = xj and yi = yj
vardır. Bu, x ve y değerlerinin benzersiz olduğu anlamına gelir. o dönüş "yok" yoksa (x, y) S. olduğu,X verildiğinde ve bir nokta listesiyle nasıl bulunur? n noktalarının</p> <pre><code>S = {(xi,yi)|1 ≤ i ≤ n} </code></pre> <p>:
- Verilen x y değerini döndürür: Ben işlevlerini destekleyen bir veri yapısını bulmalıyız.
- Verilen değer, x değerini (x, y) S olarak döndürür. Varsa, "yok" geri dönüşü.
Basit bir çözüm iki sıralı dizi oluşturmaktır (biri x değerlerine göre sıralanır ve ikinci olarak y değerlerine göre sıralanır). Verilen bir x ile y bulmak için ikili arama kullanarak O(logn)
alacaktır. X bulmak için aynı.
Birden çok dizi (n öğesinden) kullanamıyorum ve her öğe numaralı noktadır. Bu eylemleri en uygun zamanda yapabilen verimli bir veri yapısı bulmalıyım. Bulmam gereken:
T(first function)+T(second action)
.
Bu durumda hangi veri yapısı en verimli?
Çok teşekkür ederim.
Map<TypeOfX, TypeOfY> mapXtoY;
Map<TypeOfY, TypeOfX> mapYtoX;
Sen Map
herhangi somut uygulamasını kullanabilirsiniz, örneğin:
sadece belirli bir y için birden fazla x değeri olabilir ve bunun tersi de geçerlidir. örnek: (1, 1) (1, 3), "mapYtoX" ve "mapXtoY" içinde sadece bir tane girişiniz olacaktır. – Assaf
Sorgudaki belirli makalenin kullanımı (örn. "Verilmiş y, dönüş ** x değeri"), bu durumu engeller. –
tamam, iyi nokta. OP bir BiMap kullanmaktadır – Assaf