Re: подсчет времени...
От: Аноним  
Дата: 23.03.05 14:05
Оценка: 1 (1)
1. Поменяй порядок вызова варинтов 1 и 2 местами и посмотри на результат. Поделить на две отдельные апликации и лучше несколько раз в цикле отработать и смотреть среднее.
2. timer.Finish() не останавливает счетчик. Один раз присвоить значение и не вызывать несколько раз.



данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
подсчет времени...
От: shishkovsky.vladimir  
Дата: 23.03.05 03:22
Оценка:
Привет ВСЕМ!

Я только делаю, как говорится, свои первые шаги на С#, поэтому если, что не так сказал, просьба сильно не быть...

Тут такая проблема:

надо посчитать за какое время в милесекундах выполняться любые 5 (число псевдослучайное, потому что строк может быть и 20 и 100000) строк консольного приложения на C#...

Помогите плиз, чем можете......лучше простенький пример

Заранее спасибо!

С уважением,
Владимир
Re: подсчет времени...
От: vguzev http://u.pereslavl.ru/~vadim/MCSharp/
Дата: 23.03.05 04:48
Оценка:
SV>надо посчитать за какое время в милесекундах выполняться любые 5 (число псевдослучайное, потому что строк может быть и 20 и 100000) строк консольного приложения на C#...

SV>Помогите плиз, чем можете......лучше простенький пример



using System;

public class test {
 public static void Main( string[] args ) {
  DateTime a = DateTime.Now;
  // Some operations here...
  Console.WriteLine( "It took " + DateTime.Now.Subtract( a ).Milliseconds + " ms for this operations." );
 }
}


См. классы System.DateTime, System.TimeSpan
Вадим Б. Гузев
http://u.pereslavl.ru/~vadim/MCSharp/
Re: подсчет времени...
От: Andir Россия
Дата: 23.03.05 05:29
Оценка:
Здравствуйте, shishkovsky.vladimir, Вы писали:

SV>Помогите плиз, чем можете......лучше простенький пример


http://gzip.rsdn.ru/Forum/Message.aspx?mid=249579&only=1
Автор: VladD2
Дата: 23.04.03


С Уважением, Andir!
Re: подсчет времени...
От: shishkovsky.vladimir  
Дата: 23.03.05 12:42
Оценка:
Здравствуйте, shishkovsky.vladimir, Вы писали:

SV>Привет ВСЕМ!


SV>Я только делаю, как говорится, свои первые шаги на С#, поэтому если, что не так сказал, просьба сильно не быть...


SV>Тут такая проблема:


SV>надо посчитать за какое время в милесекундах выполняться любые 5 (число псевдослучайное, потому что строк может быть и 20 и 100000) строк консольного приложения на C#...


SV>Помогите плиз, чем можете......лучше простенький пример


SV>Заранее спасибо!


SV>С уважением,

SV>Владимир


ВСЕМ ОТВЕТИВШИМ СПАСИБО!


В общем получился вот такой код:

using System;
using System.Runtime.InteropServices;

namespace Utils
{
    public struct PerfCounter
    {
        Int64 _start;

        public void Start()
        {
            _start = 0;
            QueryPerformanceCounter(ref _start);
        }

        public float Finish()
        {
            Int64 finish = 0;
            QueryPerformanceCounter(ref finish);

            Int64 freq = 0;
            QueryPerformanceFrequency(ref freq);
            return (((float)(finish - _start) /(float)freq));
        }

        [DllImport("Kernel32.dll")]
        static extern bool QueryPerformanceCounter(ref Int64 performanceCount);

        [DllImport("Kernel32.dll")]
        static extern bool QueryPerformanceFrequency(ref Int64 frequency);
    }
}

namespace arraya1
{
    class Class1
    {
        static int sum(int num)
        {
            int res = 0;
            for (int i = 0; i <= num; i++)
                res += i;
            
            return res;
        }
        static void Main(string[] args)
        {
            Utils.PerfCounter timer = new Utils.PerfCounter();
            Utils.PerfCounter timer1 = new Utils.PerfCounter();

            int[] mas;
            mas = new int[100];

            System.Random test = new System.Random();
            int a = test.Next(0, 100);

            for (int i = 0; i < mas.Length; i++)
            {
                if (i == (a-1)) continue;
                mas[i] = i + 1;
            }

            //Console.WriteLine("A = " + a + "\n" + "mas" + "[" + a + "]" + " = " + mas[a-1]);

            ////// Solution #1 //////////
            timer.Start();
            int sum = 0, maxsum = 0, res = 0;
            maxsum = Class1.sum(100);

            for (int i = 0; i < mas.Length; i++)
                sum += mas[i];

            res = maxsum - sum;
            timer.Finish();
            ////// End Of Solution #1 //////////
            
            Console.WriteLine("Решение #1\n\t" + "Число, которго нет: " + res);

            Console.WriteLine("Время выполнения решения #1: " + timer.Finish());

            ////// Solution #2 //////////
            timer1.Start();
            int poz = 1;

            for (int i = 0; i < mas.Length; i++, poz++)
                if (mas[i] == 0)
                    break;
            timer1.Finish();
            ////// End Of Solution #2 //////////

            Console.WriteLine("Решение #2\n\t" + "Число, которго нет: " + poz + "\n\n");

            Console.WriteLine("Время выполнения решения #2: " + timer1.Finish() + "\n\n");

            if (timer.Finish() < timer1.Finish())
                Console.WriteLine("Решение #1 быстрее!");
            else
                Console.WriteLine("Решение #2 быстрее!\n\n");
        }
    }
}



Эта задача была вроде как на собеседовании в Microsoft, решить нужно было мгновенно....

Условием, было: есть массив из 100 чисел, одного числа нет, как узнать наиболее оптимальным образом какого????

Вот я и решил эту задачу двумя способами: 2 — это мой способ решения, 1 — способ о котором рассказал мне мой знакомый (ок же thilorn).

А подсчет времени нужен только был, для того чтобы определить, чей способ быстрее....

Оказался мой....

С уважением,
Владимир
Re[2]: подсчет времени...
От: thilorn Украина  
Дата: 23.03.05 13:34
Оценка:
Здравствуйте, shishkovsky.vladimir, Вы писали:

SV>Здравствуйте, shishkovsky.vladimir, Вы писали:


SV>>Привет ВСЕМ!


SV>>Я только делаю, как говорится, свои первые шаги на С#, поэтому если, что не так сказал, просьба сильно не быть...


SV>>Тут такая проблема:


SV>>надо посчитать за какое время в милесекундах выполняться любые 5 (число псевдослучайное, потому что строк может быть и 20 и 100000) строк консольного приложения на C#...


SV>>Помогите плиз, чем можете......лучше простенький пример


SV>>Заранее спасибо!


SV>>С уважением,

SV>>Владимир


SV>ВСЕМ ОТВЕТИВШИМ СПАСИБО!



SV>В общем получился вот такой код:


SV>using System;

SV>using System.Runtime.InteropServices;

SV>namespace Utils

SV>{
SV> public struct PerfCounter
SV> {
SV> Int64 _start;

SV> public void Start()

SV> {
SV> _start = 0;
SV> QueryPerformanceCounter(ref _start);
SV> }

SV> public float Finish()

SV> {
SV> Int64 finish = 0;
SV> QueryPerformanceCounter(ref finish);

SV> Int64 freq = 0;

SV> QueryPerformanceFrequency(ref freq);
SV> return (((float)(finish — _start) /(float)freq));
SV> }

SV> [DllImport("Kernel32.dll")]

SV> static extern bool QueryPerformanceCounter(ref Int64 performanceCount);

SV> [DllImport("Kernel32.dll")]

SV> static extern bool QueryPerformanceFrequency(ref Int64 frequency);
SV> }
SV>}

SV>namespace arraya1

SV>{
SV> class Class1
SV> {
SV> static int sum(int num)
SV> {
SV> int res = 0;
SV> for (int i = 0; i <= num; i++)
SV> res += i;

SV> return res;

SV> }
SV> static void Main(string[] args)
SV> {
SV> Utils.PerfCounter timer = new Utils.PerfCounter();
SV> Utils.PerfCounter timer1 = new Utils.PerfCounter();

SV> int[] mas;

SV> mas = new int[100];

SV> System.Random test = new System.Random();

SV> int a = test.Next(0, 100);

SV> for (int i = 0; i < mas.Length; i++)

SV> {
SV> if (i == (a-1)) continue;
SV> mas[i] = i + 1;
SV> }

SV> //Console.WriteLine("A = " + a + "\n" + "mas" + "[" + a + "]" + " = " + mas[a-1]);


SV> ////// Solution #1 //////////

SV> timer.Start();
SV> int sum = 0, maxsum = 0, res = 0;
SV> maxsum = Class1.sum(100);

SV> for (int i = 0; i < mas.Length; i++)

SV> sum += mas[i];

SV> res = maxsum — sum;

SV> timer.Finish();
SV> ////// End Of Solution #1 //////////

SV> Console.WriteLine("Решение #1\n\t" + "Число, которго нет: " + res);


SV> Console.WriteLine("Время выполнения решения #1: " + timer.Finish());


SV> ////// Solution #2 //////////

SV> timer1.Start();
SV> int poz = 1;

SV> for (int i = 0; i < mas.Length; i++, poz++)

SV> if (mas[i] == 0)
SV> break;
SV> timer1.Finish();
SV> ////// End Of Solution #2 //////////

SV> Console.WriteLine("Решение #2\n\t" + "Число, которго нет: " + poz + "\n\n");


SV> Console.WriteLine("Время выполнения решения #2: " + timer1.Finish() + "\n\n");


SV> if (timer.Finish() < timer1.Finish())

SV> Console.WriteLine("Решение #1 быстрее!");
SV> else
SV> Console.WriteLine("Решение #2 быстрее!\n\n");
SV> }
SV> }
SV>}


SV>Эта задача была вроде как на собеседовании в Microsoft, решить нужно было мгновенно....


SV>Условием, было: есть массив из 100 чисел, одного числа нет, как узнать наиболее оптимальным образом какого????


SV>Вот я и решил эту задачу двумя способами: 2 — это мой способ решения, 1 — способ о котором рассказал мне мой знакомый (ок же thilorn).


SV>А подсчет времени нужен только был, для того чтобы определить, чей способ быстрее....


SV>Оказался мой....


SV>С уважением,

SV>Владимир

Вот это прикол!!!
Гм... Ладно, побочные мысли, возникшие у меня при чтении этого поста я оставлю при себе...
Перейду сразу к делу.
Вопросов к shishkovsky.vladimir два...
1. Сумму чисел от 1 до ста считать в цикле не надо... Она равна 5050...
2. А кто сказал, что числа упорядочены??? Так что добавь к своему способу сортировочку, плз... И сравни...
... Человек есть ум. /Амвросий/
Re[2]: подсчет времени...
От: thilorn Украина  
Дата: 23.03.05 15:39
Оценка:
Здравствуйте, AndroidLV, Вы писали:

ALV>1. Поменяй порядок вызова варинтов 1 и 2 местами и посмотри на результат. Поделить на две отдельные апликации и лучше несколько раз в цикле отработать и смотреть среднее.

ALV>2. timer.Finish() не останавливает счетчик. Один раз присвоить значение и не вызывать несколько раз.

я туда даже не смотрел...
Хотя, если честно, вообще не понимаю предмет обсуждения... Если кому-то хочется указать мне, что я в чем-то не прав... ну... я просто человек...
Правда, кажется, на этот раз я прав...
... Цель конкурирующих компаний — господствовать на рынке, а не сохранить состояние конкуренции. /Джордж Сорос, финансист/
Re[3]: подсчет времени...
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 25.03.05 20:12
Оценка:
Здравствуйте, thilorn, Вы писали:

Просьба сокращать объем цитирования.
... << RSDN@Home 1.1.4 beta 4 rev. 371>>
AVK Blog
Re[2]: подсчет времени...
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 25.03.05 20:12
Оценка:
Здравствуйте, shishkovsky.vladimir, Вы писали:

Код следует выделять тегами.
... << RSDN@Home 1.1.4 beta 4 rev. 371>>
AVK Blog
Re[3]: подсчет времени...
От: shishkovsky.vladimir  
Дата: 25.03.05 21:28
Оценка:
Здравствуйте, thilorn, Вы писали:

T>Здравствуйте, shishkovsky.vladimir, Вы писали:


SV>>Здравствуйте, shishkovsky.vladimir, Вы писали:


SV>>>Привет ВСЕМ!


SV>>>Я только делаю, как говорится, свои первые шаги на С#, поэтому если, что не так сказал, просьба сильно не быть...


SV>>>Тут такая проблема:


SV>>>надо посчитать за какое время в милесекундах выполняться любые 5 (число псевдослучайное, потому что строк может быть и 20 и 100000) строк консольного приложения на C#...


SV>>>Помогите плиз, чем можете......лучше простенький пример


SV>>>Заранее спасибо!


SV>>>С уважением,

SV>>>Владимир


SV>>ВСЕМ ОТВЕТИВШИМ СПАСИБО!



SV>>В общем получился вот такой код:


SV>>using System;

SV>>using System.Runtime.InteropServices;

SV>>namespace Utils

SV>>{
SV>> public struct PerfCounter
SV>> {
SV>> Int64 _start;

SV>> public void Start()

SV>> {
SV>> _start = 0;
SV>> QueryPerformanceCounter(ref _start);
SV>> }

SV>> public float Finish()

SV>> {
SV>> Int64 finish = 0;
SV>> QueryPerformanceCounter(ref finish);

SV>> Int64 freq = 0;

SV>> QueryPerformanceFrequency(ref freq);
SV>> return (((float)(finish — _start) /(float)freq));
SV>> }

SV>> [DllImport("Kernel32.dll")]

SV>> static extern bool QueryPerformanceCounter(ref Int64 performanceCount);

SV>> [DllImport("Kernel32.dll")]

SV>> static extern bool QueryPerformanceFrequency(ref Int64 frequency);
SV>> }
SV>>}

SV>>namespace arraya1

SV>>{
SV>> class Class1
SV>> {
SV>> static int sum(int num)
SV>> {
SV>> int res = 0;
SV>> for (int i = 0; i <= num; i++)
SV>> res += i;

SV>> return res;

SV>> }
SV>> static void Main(string[] args)
SV>> {
SV>> Utils.PerfCounter timer = new Utils.PerfCounter();
SV>> Utils.PerfCounter timer1 = new Utils.PerfCounter();

SV>> int[] mas;

SV>> mas = new int[100];

SV>> System.Random test = new System.Random();

SV>> int a = test.Next(0, 100);

SV>> for (int i = 0; i < mas.Length; i++)

SV>> {
SV>> if (i == (a-1)) continue;
SV>> mas[i] = i + 1;
SV>> }

SV>> //Console.WriteLine("A = " + a + "\n" + "mas" + "[" + a + "]" + " = " + mas[a-1]);


SV>> ////// Solution #1 //////////

SV>> timer.Start();
SV>> int sum = 0, maxsum = 0, res = 0;
SV>> maxsum = Class1.sum(100);

SV>> for (int i = 0; i < mas.Length; i++)

SV>> sum += mas[i];

SV>> res = maxsum — sum;

SV>> timer.Finish();
SV>> ////// End Of Solution #1 //////////

SV>> Console.WriteLine("Решение #1\n\t" + "Число, которго нет: " + res);


SV>> Console.WriteLine("Время выполнения решения #1: " + timer.Finish());


SV>> ////// Solution #2 //////////

SV>> timer1.Start();
SV>> int poz = 1;

SV>> for (int i = 0; i < mas.Length; i++, poz++)

SV>> if (mas[i] == 0)
SV>> break;
SV>> timer1.Finish();
SV>> ////// End Of Solution #2 //////////

SV>> Console.WriteLine("Решение #2\n\t" + "Число, которго нет: " + poz + "\n\n");


SV>> Console.WriteLine("Время выполнения решения #2: " + timer1.Finish() + "\n\n");


SV>> if (timer.Finish() < timer1.Finish())

SV>> Console.WriteLine("Решение #1 быстрее!");
SV>> else
SV>> Console.WriteLine("Решение #2 быстрее!\n\n");
SV>> }
SV>> }
SV>>}


SV>>Эта задача была вроде как на собеседовании в Microsoft, решить нужно было мгновенно....


SV>>Условием, было: есть массив из 100 чисел, одного числа нет, как узнать наиболее оптимальным образом какого????


SV>>Вот я и решил эту задачу двумя способами: 2 — это мой способ решения, 1 — способ о котором рассказал мне мой знакомый (ок же thilorn).


SV>>А подсчет времени нужен только был, для того чтобы определить, чей способ быстрее....


SV>>Оказался мой....


SV>>С уважением,

SV>>Владимир

T>Вот это прикол!!!

T>Гм... Ладно, побочные мысли, возникшие у меня при чтении этого поста я оставлю при себе...
T>Перейду сразу к делу.
T>Вопросов к shishkovsky.vladimir два...
T>1. Сумму чисел от 1 до ста считать в цикле не надо... Она равна 5050...
T>2. А кто сказал, что числа упорядочены??? Так что добавь к своему способу сортировочку, плз... И сравни...

ОК, я сделаю массив из 99 чисел и посмотрим.....

Хорошо, ты говоришь, что считать не нужно от 1 до 100, а если на собеседовании дадут числа от 1 до 1565, ты тоже скажешь что их считать не надо, их сумма равна 1225395, я понимаю конечно, что подсчет суммы это дополнительное время, но как же без подсчета суммы....

Скоро выложу нормальный вариант, такой какой мы с тобой обговаривали....

С уважением,
Владимир
... << RSDN@Home 1.1.4 beta 4 rev. 303>>
Re[4]: подсчет времени...
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.03.05 03:12
Оценка:
Re[3]: подсчет времени...
Автор: AndrewVK
Дата: 25.03.05
... << RSDN@Home 1.1.4 beta 4 rev. 351>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: подсчет времени...
От: Аноним  
Дата: 26.03.05 09:34
Оценка:
раз уж вытянули эту тему иногда "ссылка на оригинальное сообщение" покажет совсем другое сообщение чем на rsdn.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[2]: подсчет времени...
От: Аноним  
Дата: 26.03.05 10:52
Оценка:
про арифметическую прогрессию слышали

s = (a+l)*n/2, a — первый, l — последний, n — кол-во членов

...
static int sum(int a, int l, int n)
{
int res = 0;
//for (int i = 0; i <= num; i++)
//res += i;
res = (a+l)*n/2;

return res;
}
С/у Дмитрий.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[4]: подсчет времени...
От: Satrapp Россия  
Дата: 26.03.05 12:48
Оценка:
Здравствуйте, shishkovsky.vladimir, Вы писали:

SV>Хорошо, ты говоришь, что считать не нужно от 1 до 100, а если на собеседовании дадут числа от 1 до 1565, ты тоже скажешь что их считать не надо, их сумма равна 1225395, я понимаю конечно, что подсчет суммы это дополнительное время, но как же без подсчета суммы....


Ну необходимо хотя бы принять во внимание тот факт, что это арифметическая прогрессия и использовать соответствующие формулы без цикла
... << RSDN@Home 1.1.4 beta 4 rev. 303>>
Re: подсчет времени...
От: thilorn Украина  
Дата: 28.03.05 10:13
Оценка:
2 AndrewVK. Торопился, недосмотрел. Спасибо, учту.
2 shishkovsky.vladimir

1. Задча ставилась четко. И никаких 894589346 там не фигурировало. Только 100.
Если не понятно уже это, зачем продолжать???
2. Числа не упорядочены. Поэтому нужно либо брать дополнительный массив (лишний расход памяти), либо сортировать (время СРАЗУ ВОЗРАСТАЕТ с О(n) до МИНИМУМ О(n)log(n)). Тут хоть спорь, хоть нет.
3. Это элементарная задача, не стоящая, чтоб на нее тратили время. Если тебе очень хочется что-либо порешать и доказать мне — вперед. Задачи с ACM для этого вполне подойдут. Динамическае программирование, графы, методы ветвей и границ, перебор с отсечениями и т.д. и т.п. Все что угодно!!! Дерзай!!! На любом языке начиная с C# и заканчивая FORTRAN'ом.
Сорри за оффтоп...
... Иных уж нет, а те далече. /Саади/
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.