Bir kodlama yarışmasında bu puzzle
sorusuna [related to data structure
] karşı karşıya kaldım.Veri yapısı üzerinde bir bulmaca
Ağaçlar bir gezegen var (gerçek ağaç ağacı yapısı değil!). Milyar hatta trilyonlarca ağaç var. Kral, tüm ağaçların yaşlarını (yılların ve tam sayılarının) ortanca kalma yöntemini kullanarak bulmalarını emreder. (Method does not matter.
) Not: Median, sıralı bir sayı listesinde "orta sayıdır".
Kısıtlamalar:
1.
en eski ağaç 2000 yaşında olduğu bilinmektedir.
2.
Tam sayıları -infinity ile + sonsuz arasında tutabilen tek bir makineye sahipler.
3.
Ancak, bellekte depolanabilecek tam sayıların sayısı 1 milyondur.
, bir sonraki depolamak için 1 milyon tamsayı depoladığınızda, önceden depolanmış olanı silmeniz gerekir.
Her nasılsa ağaçların yaşlarını saymaya devam ederken medyanı takip etmek zorundalar.
Bunu nasıl yapabilirler?
Benim yaklaşımım
Kullanım harici tür bir varyant dosyasında yazma & parçalar halinde yaş sıralamak.
[Parçalar için] k yolu birleştirmeyi uygulayın.
Yukarıdaki yaklaşımın problemi, dosyanın iki taramasına ihtiyaç duymasıdır. Ben The oldest tree is known to be 2000 years old.
biz count array
[as range of ages of tree is fixed
] alamaz bilgileri kullanır başka yaklaşım ait
düşünebilir?
Ben daha iyi bir yaklaşım olduğunu bilmek istiyorum?
Dosyadaki veri depolamak gerekmez herhangi bir yöntem var var mı? [where only main memory is sufficient?
]
Bunun yardımcı olacağından emin değil misiniz: [Huffman Kodlama] (http://en.wikipedia.org/wiki/Huffman_coding) – lllluuukke
Gödel kodlamasını kullanarak tüm ağaçların yaşlarını tek bir bellek konumuna kaydetmek hile mi? – Ishtar
Hayır, daha iyi bir fikir takdir edilmektedir. –