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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
ramezz
0 / 0 / 0
Регистрация: 22.09.2010
Сообщений: 3
#1

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

22.09.2010, 16:34. Просмотров 1217. Ответов 6
Метки нет (Все метки)

Натолкнулся на проблему, помогите, пожалуйста разобраться.
Допустим у нас есть массив из 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     "Сжатие" массива
Посмотрите здесь:

C++ Заменить все элементы массива большие чем "a" значением максимального элемента этого массива
В одномерном массиве состоящим из "N" вещественных элементов вычислить сумму элемента массива с не четными "N" C++
Строка: заменить первую "о" на "а", удалив остальные "о" C++
C++ Определить, сколько в строке символов "*", ":", ";"
Все слова, не содержащие "bc" и заканчивающиеся на "ad" заменить на "!" C++
C++ Двусвязный список с объектом трех типов: "целое число", "вещественное число", "строка"
C++ Подскажите как перегрузить операторы ">>", "<<" и "="
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
LineStown
66 / 66 / 3
Регистрация: 04.08.2010
Сообщений: 420
Завершенные тесты: 1
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
66 / 66 / 3
Регистрация: 04.08.2010
Сообщений: 420
Завершенные тесты: 1
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
Эксперт С++
4956 / 3032 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 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++ Необработанное исключение в "0x104b2288" в "Matrix.exe": 0xC0000005: Нарушение прав доступа при записи "0xcdcd
C++ Переписать элементы массива "X" в массив "Y" и подсчитать их количество
C++ Переменные "емкость", "Галлон", "Бензин"
Поменять знак " $ " на " * " к первому вхождению символа " ? " C++
C++ Дан массив из "n" элементов.Выполнить добавление элементов "k" в конец массива

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

Или воспользуйтесь поиском по форуму:
Nick Alte
Эксперт С++
1605 / 997 / 118
Регистрация: 27.09.2009
Сообщений: 1,923
Завершенные тесты: 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:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru