Member 12606619 Ответов: 1

Тип используемой реализации?


Есть вопрос, который я уже некоторое время пытаюсь решить, но мне трудно понять правильную его реализацию. Если мы напишем программу, которая будет манипулировать тысячами записей, каждая из которых содержит название продукта, тип, серийный номер, розничную цену и т. д. В каждом случае ниже объясните, какой абстрактный тип данных (очередь, стек, несортированный и отсортированный список) вы бы использовали, а также какую реализацию (массив или связанную структуру). Кратко обоснуйте свой выбор.

1) Записи будут извлекаться в том же порядке, в каком они были сохранены. Заранее неизвестно, сколько записей будет обработано и как.

Я предпочитаю несортированный список для этой цели, который использовал реализацию связанного списка, потому что мы не знаем количество записей в начале,и данные будут извлекаться по мере их хранения, следовательно, они должны быть связаны, что также может быть возможно с помощью ADT, как очередь или стек, но они используют реализацию массива, следовательно, возникает проблема выделения памяти.

2)
Все записи будут вставлены в начале, один раз и в произвольном порядке. Они будут извлекаться очень часто, основываясь на серийном номере.

Даже в случае печати всех данных записей за один раз это будет возможно с несортированным списком.

3) Большое, но неизвестное количество записей о продуктах будет вставлено по мере необходимости. Они редко будут извлечены по отдельности. Большинство операций будет состоять из обработки всех записей за один раз, например, печати всех.

Однако здесь сортированный и несортированный список имел большую эффективность использования, но я предпочитаю несортированный список, потому что он требует времени для сортировки, что снижает его эффективность.

Что вы, ребята, думаете?

Что я уже пробовал:

Я попытался ответить на эту проблему, как указано выше в вопросе.

Philippe Mori

Вы должны сами делать домашнее задание. Очередь и стек могут быть основаны на массиве или списке, поэтому ваш первый ответ неверен.

Что касается второго случая, то, похоже, вы недостаточно внимательно его прочитали. Он явно говорит, что элементы извлекаются много на основе серийного номера. Несортированный список вообще не будет эффективным.

1 Ответов

Рейтинг:
1

Sergey Alexandrovich Kryukov

Все перечисленные типы данных относятся к данным, полностью хранящимся в памяти. Я говорю о том, как они обычно реализуются; можно использовать одни и те же интерфейсы для реализаций, основанных на любом массивном хранилище, но, по-видимому, это не то, о чем вы говорите.

Я не знаю вашего размера записи; при малом размере записи "тысячи записей" - это почти ничто, но проблемы с производительностью могут легко вступить в игру, особенно при таком наивном подходе, как простое хранение, без какой-либо индексации (кроме тривиального случая сортировки, но сортировки только по одному критерию), любое использование хэш-значений и ведер, ничего подобного. В принципе, вы говорите о чем - то с операциями O(N) временная сложность, что просто несерьезно, если вам нужна хотя бы какая-то производительность. На этом этапе вам уже, возможно, придется думать в терминах баз данных.

И с большим объемом данных на запись, и если объемы растут, само хранилище становится проблематичным; ваша оперативная память может не вместить все данные. Тогда это начинает звучать как база данных совершенно определенно. Как насчет изучения баз данных?

—СА