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

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

  1. Nafanya

    Nafanya Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    581
    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
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    Nafanya
    Про счётчики ссылок слышал?
     
  3. Nafanya

    Nafanya Member

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

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

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

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

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

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    qnx.com ?
     
  5. Nafanya

    Nafanya Member

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

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    малые интервалы - ClockCycles(), большие - clock_gettime().
    доки по функциям есть в манах прямо на qnx.com
     
  7. Nafanya

    Nafanya Member

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

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

    Nafanya Member

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

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

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

    Booster New Member

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

    Nafanya Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    581
    Booster
    Если Вы не знаете о чем идет речь и что такое трудоемкость, зачем делать какие-то выводы?

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

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

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

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

    Nafanya Member

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

    Y_Mur Active Member

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

    Nafanya Member

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

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

    Booster New Member

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

    Nafanya Member

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

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Nafanya
    Ну так и выкиньте insert. В чём проблема?
     
  17. Nafanya

    Nafanya Member

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

    Y_Mur Active Member

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

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

    Booster New Member

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

    Nafanya Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    581
    This question was resolved.