Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с выводом времени работы программы, Проблема с выводом времени работы програ 
:(
    Опции темы
murzilka6002
  Дата 13.12.2011, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 12.11.2011

Репутация: нет
Всего: нет



Программа выполняет поиск по дереву, и замеряет время поиска. Вот в чём проблема: при повторном поиске тех самых данных (даже если программу перезапускаю) время выдает равное нулю. Как бы запоминает где что было и попросту выводит результат поиска - соответственно время равно 0. Даже если программу перезапускаю - всё так же, помагает только перезапуск компьютера. В сём причина? 
Вот код:
Код

#include <cstdlib>
#include <iostream>
#include <string>
#include <deque>
#include <ctime>

using namespace std;

//Class drzewa
class tree_node
{
      public:
        int id;                                        //Numer
        string data;                                   //zawartosc
        deque <tree_node> children;                    //dzieci
        
        tree_node(int theId, string theData):          //Konstruktor
               id(theId),
               data(theData)
                {
                }
  
        tree_node& add_node(const tree_node& node)
                {
                 children.push_back(node);
                 return children.back();
                }
};

//Funkcja wyszukiwania
void szukaj(tree_node& t, string& s)
{
         if (t.data==s)                                //Wyszuk
            {
             cout<<"id= "<< t.id<<"\t";                //Wywod wyszukiwania
            }           
         for(int i=0; i<t.children.size();i++)         //Sprawdzanie wezla
                {
                 szukaj(t.children[i],s);
                }
}

        
int main(int argc, char *argv[])
{

    
tree_node root(1, "Ivan");
  tree_node& node2Ref = root.add_node(tree_node(2, "Mihal"));
  tree_node& node3Ref = root.add_node(tree_node(3, "Dawid"));
  tree_node& node4Ref = root.add_node(tree_node(4, "Mihal"));
  tree_node& node5Ref = root.add_node(tree_node(5, "Tania"));
    tree_node& node6Ref = node2Ref.add_node(tree_node(6, "Andrzej"));
    tree_node& node7Ref = node2Ref.add_node(tree_node(7, "Tania"));
    tree_node& node8Ref = node4Ref.add_node(tree_node(8, "Sasza"));
    tree_node& node9Ref = node4Ref.add_node(tree_node(9, "Ivan"));
    tree_node& node10Ref = node5Ref.add_node(tree_node(10, "Dawid"));
    tree_node& node11Ref = node5Ref.add_node(tree_node(11, "Ania"));
    tree_node& node12Ref = node5Ref.add_node(tree_node(12, "Ania"));
      tree_node& node13Ref = node7Ref.add_node(tree_node(13, "Olia"));
      tree_node& node14Ref = node10Ref.add_node(tree_node(14, "Kolia"));
      tree_node& node15Ref = node12Ref.add_node(tree_node(15, "Bohdan"));
      tree_node& node16Ref = node12Ref.add_node(tree_node(16, "Andrzej"));
      tree_node& node17Ref = node12Ref.add_node(tree_node(17, "Tania"));
      tree_node& node18Ref = node12Ref.add_node(tree_node(18, "Dior"));


////////////////Wyszukiwanie//////////////////////////

string szuk;

cin>>szuk;

clock_t t0=clock();
szukaj(root,szuk);
cout<<endl;

clock_t t1=clock();
cout<<"czas wykonannia = "<< (double)(t1 - t0) / CLOCKS_PER_SEC << endl;
    system("PAUSE");
    
    return EXIT_SUCCESS;
}


Была ошибка в коде, но уже изменил, но это на результат не влияет

Это сообщение отредактировал(а) murzilka6002 - 13.12.2011, 22:51
PM MAIL   Вверх
bsa
Дата 13.12.2011, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Очень нерационально делать подсчет времени для операции ввода. Вынеси cin>>szuk до строки 47. Думаю, после этого результаты стабилизируются... на 0-й отметке.
PM   Вверх
murzilka6002
Дата 13.12.2011, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 12.11.2011

Репутация: нет
Всего: нет



Я это уже изменил (это просто случайно старый код бросил), но результат такой же. Если два разы подряд ввести одно и то де слово для поиска.
PM MAIL   Вверх
Estranged
Дата 13.12.2011, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 30.8.2010

Репутация: нет
Всего: 3



Надо использовать таймер с большей разрешающей способностью. За 1 мс процессор успевает выполнить всю программу.
PM MAIL   Вверх
bsa
Дата 14.12.2011, 00:09 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Как вариант, можно прогнать поиск 10000 раз. Тогда будет более адекватная скорость.
PM   Вверх
volatile
Дата 14.12.2011, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Да, всё верно.

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

PM MAIL   Вверх
murzilka6002
Дата 14.12.2011, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 12.11.2011

Репутация: нет
Всего: нет



Но дело в том, что при задавании повторного поиска но другого слова - всё показывает верно, или загрузка модуля, системного кеша  производиться для каждого поискового слова?

PM MAIL   Вверх
volatile
Дата 14.12.2011, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



murzilka6002, 
clock(); это очень и очень грубый таймер.
тик под виндой происходит, если не ошибаюсь, 1 раз в ~15 msec.

Таким таймером, можно измерять только большие времена (порядка 1 секунды и больше).
Послушайте совета что вам говорили.
Либо возьмите более точный таймер (в соседней теме где-то обсуждение)
Либо зациклите программу, чтобы она 1000 раз выполняла операцию.

Тогда можно будет говорить о каких-то объетивных результатах измерения.


PM MAIL   Вверх
rumit7
Дата 14.12.2011, 06:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 16.6.2011

Репутация: нет
Всего: 7



Цитата(volatile @ 14.12.2011,  01:19)
Послушайте совета что вам говорили.
Либо возьмите более точный таймер (в соседней теме где-то обсуждение)
Либо зациклите программу, чтобы она 1000 раз выполняла операцию.

Тогда можно будет говорить о каких-то объетивных результатах измерения.

В обсуждении вот здесь, рекомендовали вот эту библиотеку
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0499 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.