Структура данных для истории строительства / сноса - PullRequest
0 голосов
/ 11 мая 2018

вот проблема: Мне нужно создать программу, которая имитирует город, в частности его здания, чтобы определить среднюю высоту его горизонта и другие значения. Моя проблема заключается в выборе структуры данных: мне нужно что-то, что позволило бы мне рассчитать эти значения за разные годы: например, пользователь мог запросить значение горизонта в 2016 году, а затем самое высокое здание в 2020 году.

Каждое здание имеет Строку в качестве ключа, но после сноса тот же ключ снова доступен.

Это проект для университета, поэтому я прошу только совет; Мне нужно знать больше «что» и «почему», чем «как».

Я использую Java.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Если бы ключи здания были уникальными, у вас был бы такой класс:

class Building
    Key
    Name
    Height
    YearBuilt
    YearDemolished

И вы могли бы решить свою проблему с помощью простого цикла по коллекции зданий:

for each building
    if (building.yearBuilt <= year && building.yearDemolished >= year)
    {
        // the building was standing during that year
    }

Если ключи можно использовать повторно, вам все равно нужно хранить историческую информацию. Если вы держите его вместе со зданием, то у вас есть что-то вроде:

class HistoricalInfo
    Name
    Height
    YearBuilt
    YearDemolished

class Building
    Key
    HistoricalInfo[]  // some collection (array, list, etc.)

И ваш цикл становится немного сложнее:

for each building
    for each building.historyInfo
        if (historyInfo.YearBuilt <= year && historyInfo.YearDemolished >= year)
        {
            // this instance of the key was standing during that year
        }
0 голосов
/ 11 мая 2018

Вы ищете карту многоуровневого словаря некоторых видов.У вас может быть двухуровневый словарь, например {2018: {height1, height2}, 2002: {} ...}, где каждый из внутренних словарей - это высота всех зданий за этот год (что является ключом).Кроме того, словари работают быстро (хотя вы торгуете производительностью ради космоса).

Надеюсь, это поможет!

...