Napotkałem to pytanie puzzle
[related to data structure
] w konkursie kodowania.Układanka o strukturze danych
Istnieje planeta drzew (prawdziwe drzewa, a nie struktura danych drzewa !!). Ma miliardy, a nawet tryliony drzew. Król nakazuje znaleźć medianę wieku (w latach i liczbach całkowitych) wszystkich drzew, używając na przykład datowania węgla. (Method does not matter.
) Uwaga: Mediana jest "średnią liczbą" w posortowanej liście liczb.
Ograniczenia:
1.
Najstarsze drzewo jest znany 2000 lat.
Mają jedną maszynę, która może przechowywać liczby całkowite w zakresie od -infinity do + nieskończoności.
3.
Ale liczba takich liczb całkowitych, które mogą być przechowywane w pamięci na raz, wynosi 1 milion.
, więc po zapisaniu 1 miliona liczb całkowitych do zapisania następnego należy usunąć już zapisany.
Więc jakoś muszą śledzić medianę, kiedy liczą wieki drzew.
Jak mogą to zrobić?
Moje podejście
Zastosowanie wariant zewnętrznej rodzaju sortowania wieków w kawałkach & zapisać je w pliku.
Zastosuj k-way merging [dla porcji].
Problem z powyższym podejściem polega na tym, że potrzebuje on dwóch skanów pliku.
mogę myśleć innym podejściu który wykorzystuje informacje The oldest tree is known to be 2000 years old.
nie możemy wziąć count array
[as range of ages of tree is fixed
]?
Chcę wiedzieć, czy istnieje lepsze podejście?
Czy istnieje dowolny sposób, w którym nie trzeba przechowywać dane w pliku? [where only main memory is sufficient?
]
Nie jestem pewien, czy to pomoże: [Kodowanie Huffmana] (http://en.wikipedia.org/wiki/Huffman_coding) – lllluuukke
Czy to oszustwo do przechowywania wieków wszystkich drzew w jednym miejscu pamięci za pomocą kodowania Gödel? – Ishtar
Nie, lepszy jest lepszy pomysł. –