#algorithm #struct
#алгоритм #структура
Вопрос:
У меня есть 1 миллион следующей структуры:
type person struct {
age int
. . .
//some more attributes like name, surname, etc
}
Моя цель в конце — узнать для имени каждого человека среднее значение его возраста. Человек может встречаться несколько раз или только 1 раз. Я читаю структурные данные один за другим, они заданы случайным образом, и я не могу их отсортировать.
Пример только с атрибутами возраста и имени, записанными как данные типа ключ-значение:
Josh: 34
Abigail: 6
Aaron: 43
Josh: 4
Frederich: 22
...
Aaron: 3
...
Поэтому, когда я обращаюсь к данным, например, к Аарону, я не знаю, сколько раз он встречается в данном массиве данных, возможно, это единственный раз, когда я его вижу. В конце мне нужно знать среднее значение возраста каждого человека, которое не требуется в заказе.
Моя идея заключалась в следующем:
Я использовал данные с ключевыми значениями следующим образом: map[name]=average, howMany
. Когда я обращался к данным, я вычислял новое среднее значение с учетом возраста новых данных и увеличивал количество. Я бы сказал, довольно просто.
Я не могу хранить в своей оперативной памяти 1 миллион подобных структур.
Я был бы признателен за любые предложения и любые исправления грамматики.
Комментарии:
1. Идея hashmap хороша. Если вам нужно обновить набор людей (добавить или удалить людей), вы должны сохранить дополнительные данные: вместо среднего значения значение вашей карты должно быть парой (общее количество возрастов, количество людей)
2. В этом вопросе слишком много неизвестных параметров… например, являются ли данные статическими (вы можете вычислить их один раз заранее) или динамическими (необходимо реализовать анализ данных при запросе имени); можете ли вы изменить базовую структуру данных (например, отсортировать ее по имени), есть ли какая-то база данных, лежащая в ее основе (SQL может предоставитьответ по прихоти) и т.д.
3. Привет @ Jur, данные статичны и нет, я ничего не могу отсортировать, потому что это было бы очень медленно.
4. Если все 1 миллион записей имеют разные имена, результат должен состоять из 1 миллиона средних значений. Запрещено ли возвращать результат (набор средних значений) в ОЗУ? Кроме того, как сортировка 1 миллионов записей может быть «очень медленной»? Вы занимаетесь робототехникой или высокочастотной торговлей? 🙂