1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
| Ира |
Сообщение
#1
|
|
Гость |
Задан массив, состоящий из n неотрицательных чисел.
Найти в нём индекс элемента для которого сумма элементов, стоящих до него, наименее отличается от суммы элементов, стоящих после него. ( Числа хранятся в линейном односвязном списке или в файле с последовательным доступом. Найти наиболее эффективные алгоритмы для случая прямого и последовательного доступа с возможностью использовать рабочий массив размерностью n или без неё) Спасибо за внимание, буду благодарна за ответы. |
![]() ![]() |
| Atos |
Сообщение
#2
|
|
Прогрессор ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 602 Пол: Мужской Реальное имя: Михаил Репутация: 9 |
Ого, сколько уже ответов...
пока написал и хотел выложить вот это: Цитата Наиболее эффекивные алгоритмы: 1. Без использования доп. массива А) Список или файл с последовательным доступом. Пробегаем список, подсчитывая сумму всех его элементов, и запоминаем её. Затем начинаем проходить его ещё один раз, опять суммируя элементы, но теперь для каждого элемента(с некоторым инднксом i) вычисляем функцию следующим образом: находим разность удвоенной текущей суммы (элементов с номерами от 1 до i) и суммы всего массива и отнимаем от этой разности значение (i+1)-го эл-та. Начиная с некоторого i полученная функция становится неотрицательной. Значит, либо i-й, либо (i+1)-й эл-т является искомым (а именно тот, для которого модуль полученной функции меньше). Б) Массив Начинаем суммировать элементы массива сразу с обеих сторон. Как только сумма последовательности элементов с одной стороны начнёт превосходить, переходим на другую сторону и наоборот. Там, где последовательности встретятся, и располагается искомый элемент. 2. С использованием доп. массива Пробегаем исходный массив или список, записывая в (i+1)-й элемент доп. массива сумму его i-го эл-та и (i+1)-го исходного эл-та. Таким образом, доп. массив- это массив текущих сумм. Очевидно, функция, описанная в 1A), является неубывающей (ведь все исходные эл-ты неотрицательны), а значит, мы можем организовать бинарный поиск её нуля, используя доп. массив(ведь у нём записаны текущие суммы для любого i, а в n-м эл-те записана сумма всего исходного массива). Разумеется, не обязательно найдётся именно нулевое значение функции, но мы в любом случае сможем узнать индекс, для которого она ближе всего к нулю. Это и будет индекс искомого эл-та. Трудоёмкость бинарного поиска O(квадратный корень из n), а по сравнению со способом 1Б) мы выигрываем О(n), так как там на каждом шаге шаге прохода массива мы делали по крайней мере на одну операцию больше (сравнение текущих сумм последовательностей и, воэможно, переход на другую сторону массива). Т. образом, для достаточно большого n этот способ будет оптимальным (не видно, как его можно ещё улучшить) Поытайся разобраться в алгоритме. Если что-то неясно, спрашивай. В принципе, желательно было бы хотя бы попробовать самостоятельно написать программу по имеющемуся алгоритму. Впрочем, если срочно надо, можно помочь и с кодом. В таком слуае напиши как можно подробнее, как он должен выглядеть?массив динамический?список уже имеется или его тоже надо реализовывать? и т. п. |
Ира массивы, линейный односвязный список , файлы + 13.10.2004 23:52
Atos Задание срочное?
Постараюсь за выходные подумать н… 16.10.2004 12:53
zx1024 Пусть A - указатель на список с полями inf - само … 16.10.2004 17:11
Amro zx1024 Или я совсем дурак, или я просто не допонял… 16.10.2004 23:10
virt Flipper ,Гость_Tanya
решать вам тут никто не обяза… 16.10.2004 23:35
Amro Само нахождение номера элемента я понимаю так:
Во … 16.10.2004 23:42
Atos Посмотрел...
То, что у меня описано в 1А), не силь… 17.10.2004 22:36
Amro Atos Дык ведь сказано
Выходит что сам элемент не … 17.10.2004 22:59
Atos
Ну, под суммой элементов, стоящих перед первым, м… 17.10.2004 23:10
Amro Получается что так, тагды понятно......
тоже вер… 17.10.2004 23:26
zx1024 Amro, я, возможно подзабыл чистый Паскаль, но свой… 18.10.2004 0:37
Atos Точно... :huh: Спасибо за поправку. Чего-то я совс… 18.10.2004 11:51
Guest С помощью односвязного списка напишите, пожалуйста… 21.11.2005 0:56
volvo Guest, во-первых, зачем было поднимать тему, котор… 21.11.2005 0:59![]() ![]() |
|
Текстовая версия | 8.11.2025 14:33 |