Кластеризация отсчётов

Тема в разделе "LANGS.C", создана пользователем Nafanya, 29 сен 2010.

  1. Nafanya

    Nafanya Member

    Публикаций:
    0
    r90

    <<В конце концов, можно научить метод Send_Sample возвращать значение -- указатель на созданный кластер, который будет равен NULL, если кластер не создан.

    Думал долго об этом,хорошее решение. Но наверное придется возвращать по значению. Ведь перед возвращением кластера в main, объект должен освободить память которую он занимал. Иначе 4 Гб оперативы вылетят за несколько секунд пробега программы. Если возвращать указатель, то память освобождать до возврата нельзя.

    Cluster Transformer::Get_Cluster()
    {
    list_iter=plist->begin();
    Cluster thecluster(*list_iter);//Локальная переменная, у которой память после выхода из видимости освободится.
    //Инициализируется первым элементом списка.
    list_iter=plist->erase(list_iter);//Освобождается память кластера в объекте
    number--;//Кол-во кластеров уменьшается
    return(thecluster);//Возврат кластера в main, и освобождение памяти локальной переменной.
    }

    Если указатель на кластер в main вернуть, как память для него освобождать в объекте?
     
  2. r90

    r90 New Member

    Публикаций:
    0
    Nafanya
    Про счётчики ссылок слышал?
     
  3. Nafanya

    Nafanya Member

    Публикаций:
    0
    Отчитался перед руководителем по проделанной работе. На данный момент полностью реализовано ядро алгоритма кластеризации (Clusterization_Core), которое осуществляет преобразование отсчетов в кластера.

    Руководитель сказал, что пора перейти к последнему этапу - оптимизации.
    Преобразование происходит в реальном времени. Поэтому необходимо исключить сортировку из ядра, заменив её слиянием двух упорядоченных наборов. Для приложений реального времени сортировка - слишком дорогостоящая операция, поэтому она должна быть исключена.

    У меня требование, чтоб приложение было кросс-платформенным. Для себя самого хотелось бы протестировать его в ОСИ жесткого реального времени, а не мягкого(как я понял в дальнейшем,эксплуатировать мою разработку будут в ОС мягкого реального времени).

    Пожалуйста подскажите возможно ли где-нибудь в интернете достать хотя бы 30-дневную ОС QNX(дистрибутив с компилятором)? Может ли кто нибудь этой драгоценной осью поделиться, был бы очень благодарен!

    Если не получится достать QNX, придётся тестировать в Linux с мягким реальным временем.
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    qnx.com ?
     
  5. Nafanya

    Nafanya Member

    Публикаций:
    0
    n0name
    Спасибо!
    Вы не подскажите,как в QNX померить время затраченное на выполнение
    1)Строки кода программы(без системного вызова),например(count++;)
    2)Строки кода с системным вызовом,время=выполнение строки кода+время обработки системного вызова , например(ptr=new Cluster;)
    Что-то додуматься никак не могу.
    Как там вообще задержки меряются?
     
  6. n0name

    n0name New Member

    Публикаций:
    0
    малые интервалы - ClockCycles(), большие - clock_gettime().
    доки по функциям есть в манах прямо на qnx.com
     
  7. Nafanya

    Nafanya Member

    Публикаций:
    0
    А с помощью System Profiler, Application Profiler в Momentics IDE никак нельзя измерить?
    Они вроде тоже времена мерят, только я пока до конца не разобрался как они работают.
    Просто понимаете мне желательней временную диаграмму получить, чтоб потом ее вывесить на плакате можно было.

    Вопрос не актуален, измерил.
     
  8. Nafanya

    Nafanya Member

    Публикаций:
    0
    Учитывая справедливое замечание Y_Mur,теперь буду задавать вопросы конкретнее - меньше воды, больше технических терминов.

    Какова трудоемкость операций insert() и push_back() для вектора стандартной библиотеки(std::vector) из N элементов?
    Если кто знает, подскажите пожалуйста.

    Эти сведения необходимы мне для оценки трудоемкости моего алгоритма.
     
  9. Booster

    Booster New Member

    Публикаций:
    0
    Откуда такие термины берёте - "трудоёмкость"? Как можно писать диплом так слабо разбираясь в языке? По поводу вашего вопроса - http://www.sgi.com/tech/stl/Vector.html
     
  10. Nafanya

    Nafanya Member

    Публикаций:
    0
    Booster
    Если Вы не знаете о чем идет речь и что такое трудоемкость, зачем делать какие-то выводы?

    Вы не в курсе, что если Вы создаете новый алгоритм, то перед комиссией надо вывешивать статистически снятую зависимость Трудоемкости алгоритма?

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

    Трудоемкость может быть равна N, N^2,log N, Const и т.д.

    Да, и как мне сегодня сказали,программная реализация алгоритма - это только пол-работы, нужна ещё оценка трудоемкости, для новых алгоритмов-это обязательно.
     
  11. Nafanya

    Nafanya Member

    Публикаций:
    0
    Кажется нашел:
    "std::vector - C-подобный динамический массив произвольного доступа с автоматическим изменением размера при добавлении/удалении элемента. Доступ по индексу за O(1). Добавление-удаление элемента в конец vector занимает амортизированное O(1) время, та же операция в начале или середине vector — O(n)."
     
  12. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Nafanya
    Это очередной пример неудачно заданного вопроса ;) - не знаю в каком учебнике вы вычитали про трудоёмкость (очень неудачный термин в даннном контексте) - обычно все пользуются термином сложность.
     
  13. Nafanya

    Nafanya Member

    Публикаций:
    0
    Y_Mur
    А вы не могли бы сказать,где можно найти алгоритм слияния двух упорядоченных наборов(N и M элементов) со сложностью O(M+N)?
    У меня сейчас реализовано это с O(N^2). Нужен другой алгоритм.

    Никак не получается найти. Кнута скачал, что-то тоже там в трех томах не выходит найти.
     
  14. Booster

    Booster New Member

    Публикаций:
    0
    Сейчас автор топа снова на меня обидится, но это жесть. Как можно умудрится слить два упорядоченных набора за O(N^2), выше моего понимания. Вы хоть немного подумайте, прежде чем писать. ^)
     
  15. Nafanya

    Nafanya Member

    Публикаций:
    0
    Booster
    Имеется в виду в каждом упорядоченном наборе по N элементов.
    Я использовал операцию добавления insert(),которая сама по себе имеет сложность O(N).
    Ну и считайте N раз добавляли в вектор элемент, сложность одного добавления O(N). Выходит O(N^2).
    Сегодня этот косяк нашли,сказали выкинуть insert(). Сам разве догадаешься, что insert() вместо одной операции добавления, выполняет N операций.
     
  16. Booster

    Booster New Member

    Публикаций:
    0
    Nafanya
    Ну так и выкиньте insert. В чём проблема?
     
  17. Nafanya

    Nafanya Member

    Публикаций:
    0
    Booster
    Ну есть два вектора.
    А как в середину первого пихнуть элемент со сложностью O(1)? Или все таки придется использовать временный третий вектор для слияния, а потом его копировать в первый. Результат слияния в первом должен быть.
     
  18. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Nafanya
    Сливай два набора в третий - который изначально пустой и будет тебе счастье ;) А каждый раз "пихать в середину массива" естественно жесть :)) И алгоритм работы библиотечных функций, особенно таких простых, нужно хотя бы в общих чертах знать и понимать чтобы таких граблей избегать. Кстати незачем его потом копировать в первый - используй его дальше и всё.

    Кстати ещё связанные списки существуют, где можно вставлять в середину или объединять наборы вообще без копирования элементов.
     
  19. Booster

    Booster New Member

    Публикаций:
    0
    Копировать из временного не обязательно, можно выделить новую память под массив и сразу туда сливать.
     
  20. Nafanya

    Nafanya Member

    Публикаций:
    0
    This question was resolved.