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

Как сгладить неоднородности в массиве - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Объясните пожалуйста некоторые участки кода http://www.cyberforum.ru/cpp-beginners/thread1019391.html
Есть код (Идеально сбалансированное дерево): // #include "stdafx.h" #include <stdio.h> #include <iostream> using namespace std; struct node {
C++ Напечатать в виде таблицы все полученные значения для m DEV C++ !!! Десятичное целое число m переводится в двоичную систему счисления, разряды в этой записи переставляются в обратном порядке, и снова производится перевод в десятичную систему счисления. Напечатать в виде таблицы все полученные значения для m= 512, 513, 514,..., 1023. Начало таблицы имеет следующий вид: 512 1000000000 00000000011 http://www.cyberforum.ru/cpp-beginners/thread1019390.html
C++ Классы С++ (как описать методы и свойства к массиву)
Есть Класс Массив. помогите описать для него простой метод и свойство. Метод: Сумма или Среднее арифметическое элементов массива. Свойство: Возвращающее общее количество нечетных отрицательных элементов в массиве (доступное только для чтения) или Позволяющее уменьшить значение всех элементов массива на скаляр (доступное только для записи). -----
отличия dynamic_cast, static_cast и (object*) C++
хочу разобраться с преобразованием указателей в c++ Итак имеем указатель на какойто класс myclass *mc = new myclass(); myclass2 *mc2 = new myclass2(); myclass3 *mc3 = new myclass3(); 1) dynamic_cast
C++ Задание на двумерный массив с оформлением в виде функции http://www.cyberforum.ru/cpp-beginners/thread1019360.html
Среди столбцов заданной целочисленной матрицы, содержащей только такие элементы, которые по модулю не больше m, найти столбец с минимальным произведением элементов.
C++ char и char* разница Привет всем:) Изучаю С++ и вот застрял на задании где надо удалить символ из входного потока. В гугле нашел вот такое код( смотрите ниже ). Он работает удаляет нужный символ. Но я не могу понять чем отличается char от char*. Можно простое объяснение или простой пример программы, чтобы понять разницу. Заранее спасибо:) #include <iostream> using namespace std; char * del_char(const char... подробнее

Показать сообщение отдельно
ustus_alex
6 / 6 / 1
Регистрация: 22.11.2013
Сообщений: 100
26.11.2013, 15:15  [ТС]     Как сгладить неоднородности в массиве
Цитата Сообщение от HedgehogLu Посмотреть сообщение
Как вариант сделать потоковое сглаживание.
А именно задать окно сглаживание (минимальный размер изменения значений, которое считается истинным)
Изначально потоком считываем данные и расчитываем среднеарифметическое до заполнения окна (если данных не хватает то ссно прекращаем считывание) определяем среднеарифметическую для окна, если она больше 0,5 тогда это 1 если меньше тогда 0.
Следовательно первоначально выводим ПОЛОВИНУ окна заполненную соответственно средне арифметическому
Затем последующие значения мы получаем добавляя отнимая краевые значения у окна.
А изменения вносимые мы знаем, т.к. ширина окна фиксирована
По окончанию данных оставшуюся часть заполняем согласно оставшемуся значению среднего арифметического. Если же значение равно 0,5 ровно, можно инвертировать значение а можно и оставить согласно среднему арифметическому
таким образом сдвигая окно сглаживаются данные

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

Добавлено через 5 минут
В принципе осуществляя несколько проходов с увеличением размера окна можно сгладить данные до необходимых интервалов.
однако не забываем про вносимую погрешность и неопределенность при среднем арифметическом равном 0,5

Добавлено через 2 минуты
Для корректной работы окна достаточно реализовать стек FIFO.

Добавлено через 1 минуту
блин а вот накладные расходы работы стека я и не учел. из за этого может стать медленнее чем поиск "пятен"
Для быстроты визуализации резальтата сделал вначале код в матлабе:

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
d=b;                          % передаем основной массив в темп
for j=1:length(d)          % задаем цикл в длинну массива
    count0=0;           % счетчик нуля в нуль
    count1=0;           % счетчик единицы в нуль
    for i=1:15000       % задаем окно на 15.000 элементов
        if b(i)==0
            count0=count0+1;   % считаем нули
        else
            count1=count1+1;   % считаем единицы
        end
        if count0>count1             % если нулей больше все элементы окна заполняем нулями
            d(i)=0;            
        else
            d(i)=1;
        end
    end
j=j+15001;      % т.к. первые 15000 элементов массива просмотрены, начинаем смотреть с 15001
end
Алгоритм работает, сглаживание есть, но оно не идеальное, все равно мелочевка пролезает, а она сказывается на работе в целом, ну и конечно время работы... можно во время пробега по массиву заварить кофе и выпить его неспеша...
 
Текущее время: 15:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru