Форум программистов, компьютерный форум CyberForum.ru

"Сжатие" массива - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
ramezz
0 / 0 / 0
Регистрация: 22.09.2010
Сообщений: 3
22.09.2010, 16:34     "Сжатие" массива #1
Натолкнулся на проблему, помогите, пожалуйста разобраться.
Допустим у нас есть массив из 100 элементов. Чтобы "сжать" его в массив из 50 элементов, достаточно брать среднее арифм. каждых двух подряд идущих чисел и записывать в новый массив. А как поступить, если нужно массив из 100 "сжать" в массив, например, из 70 элементов?
(например из 10 20 30 получить 13.66 и 26.33)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2010, 16:34     "Сжатие" массива
Посмотрите здесь:

В одномерном массиве состоящим из "N" вещественных элементов вычислить сумму элемента массива с не четными "N" C++
Необработанное исключение в "0x775e15de" в "laba3.exe": 0xC0000005: Нарушение прав доступа при чтении "0xfdfdfdf9". C++
Необработанное исключение в "0x778e15de" в "dir-3.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00000000" C++
C++ С++ консольное приложение win32, матерится на первое "pow" после "if", а на "system" говорит что неопределён.
C++ Разработать класс "Массив больших чисел", который состоит из объектов класса "Большие целые числа". Найти сумму элементов массива.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
LineStown
 Аватар для LineStown
63 / 63 / 3
Регистрация: 04.08.2010
Сообщений: 399
22.09.2010, 16:41     "Сжатие" массива #2
Алгоритм "сжимания" должен быть прописан в условии задачи.
Нет такого общепринятого понятия.
ramezz
0 / 0 / 0
Регистрация: 22.09.2010
Сообщений: 3
22.09.2010, 17:37  [ТС]     "Сжатие" массива #3
ну допустим есть 10 элементов. Берем среднее арифметическое каждых 2-х подряд идущих. Получаем массив из 5 элементов. А если нужно получить на выходе массив из 7 элементов, то непонятно как брать эти самые средние арифметические каждых 1.42 идущих подряд чисел.
Если представить, что массив - это график функции y = x, то по сути нужно получить график, подобный исходному, только с меньшим числом аргументов.
LineStown
 Аватар для LineStown
63 / 63 / 3
Регистрация: 04.08.2010
Сообщений: 399
22.09.2010, 17:43     "Сжатие" массива #4
ИМХО:Если использовать такую теорию, то "сжимать" нужно так
брать равномерно среднее арифметическое сколько раз, на сколько нужно урезать массив.
Пример: массив 10 символов. Урезать до 7. то нужно взять ср.ариф 10-7=3 раза. 10/3=3.3, в среднем каждые 3 элемента (3 с 4,6 с 7,9 с 10) Ну примерно так.....
Нужно график нарисовать и посмотреть (y=значение х=номер элемента в массиве)
(результат нужно тестить, сча какую то прогу сваяю, посмотрим)
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
22.09.2010, 17:47     "Сжатие" массива #5
А если, например, брать средние арифметические только до тех пор, пока они нужны?
ramezz
0 / 0 / 0
Регистрация: 22.09.2010
Сообщений: 3
22.09.2010, 18:11  [ТС]     "Сжатие" массива #6
Цитата Сообщение от silent_1991 Посмотреть сообщение
А если, например, брать средние арифметические только до тех пор, пока они нужны?
нене, вот немного подробнее написал:

допустим есть 2 массива а и b одинаковой длины по 100 элементов. мне нужно их сложить, но не поэлементно, а с учетом каллибровки.
Т.е. если 1-ый массив по существу хранит значения по равномерной шкале от 10 до 40 кг (т.е. элементу а[0] соответствует - кол-во предметов весом 10кг, элементу а[1] - кол-во предметов весом 13,33 кг и т.д. элементу а[99] - кол-во предметов весом 40 кг), а 2-ой массив также хранит значения кол-ва предметов определенного веса, но по равномерной шкале от 1 до 100 кг. Повторюсь, количесвто элементов в массивах одинаково
Очевидно, что поэлементное сложение лишает задачу смысла. А нужно 100 элементов массива а добавить в нужный промежуток из 40 элементов массива b. Так вот я и спрашиваю, как бы сжать 1-ый массив для добавления его в отрезок из 2-го

Добавлено через 5 минут
Цитата Сообщение от LineStown Посмотреть сообщение
брать равномерно среднее арифметическое сколько раз, на сколько нужно урезать массив.
получить нужно 7-ми элементный, то есть урезать на 3. и соот-но среднее арифм. брать 7 раз.
т.е. если это числа 4 9 3 1 4 10 3 6 7 2
то первым числом выходного массива будет 4*(7/7) + 9*(3/7) = 55/7
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2010, 19:25     "Сжатие" массива
Еще ссылки по теме:

C++ В массиве структур студент с полями "ИМЯ" "ВОЗРАСТ" "УСПЕВАЕМОСТЬ" выполнить сортировку по успеваемости по возрастанию
C++ Вставить пробел после каждого символа "." "," "!" или "?", если за этими символами не следует пробел
C++ Переписать элементы массива "X" в массив "Y" и подсчитать их количество

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
22.09.2010, 19:25     "Сжатие" массива #7
Наиболее очевидный ответ - линейная интерполяция. Формула взвешенного среднего a и b с коэффициентом k выглядит как a*(1-k) + b*k. В данном случае k, который всегда находится в интервале от 0 до 1 - показатель "близости" к a или b: 0 соответствует нахождению в a, 1 соответствует b, а 0.5 - на полпути между ними.
Допустим, нам надо перегнать массив размером 17 в массив с размером 11.
Остаётся перекалибровать шкалу индексов: спроецируем новый интервал от 0 до 6 на старый, от 0 до 9. Обозначив старый индекс как i', а новый как i, получим i' = i*16/10 (заметим, что здесь мы пользуемся размерами массивов, уменьшенными на 1, при этом крайние элементы в исходном и результирующем массивах будут совпадать).
Рассмотрим на примере элемента нового массива с индексом 4: i' = 4*16/10 = 6.4
Получается, что в новый массив под индексом 4 мы занесём взвешенную сумму элементов 6 и 7 с коэффициентом 0.4
Таким образом массивы можно как сжимать, так и расширять (однако когда мы сжимаем в 2 и более раз, понадобятся дополнительные ухищрения).
Yandex
Объявления
22.09.2010, 19:25     "Сжатие" массива
Ответ Создать тему
Опции темы

Текущее время: 20:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru