Я только делаю, как говорится, свои первые шаги на С#, поэтому если, что не так сказал, просьба сильно не быть...
Тут такая проблема:
надо посчитать за какое время в милесекундах выполняться любые 5 (число псевдослучайное, потому что строк может быть и 20 и 100000) строк консольного приложения на C#...
Помогите плиз, чем можете......лучше простенький пример
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." );
}
}
Здравствуйте, 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).
А подсчет времени нужен только был, для того чтобы определить, чей способ быстрее....
Здравствуйте, 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. А кто сказал, что числа упорядочены??? Так что добавь к своему способу сортировочку, плз... И сравни...
1. Поменяй порядок вызова варинтов 1 и 2 местами и посмотри на результат. Поделить на две отдельные апликации и лучше несколько раз в цикле отработать и смотреть среднее.
2. timer.Finish() не останавливает счетчик. Один раз присвоить значение и не вызывать несколько раз.
Здравствуйте, AndroidLV, Вы писали:
ALV>1. Поменяй порядок вызова варинтов 1 и 2 местами и посмотри на результат. Поделить на две отдельные апликации и лучше несколько раз в цикле отработать и смотреть среднее. ALV>2. timer.Finish() не останавливает счетчик. Один раз присвоить значение и не вызывать несколько раз.
я туда даже не смотрел...
Хотя, если честно, вообще не понимаю предмет обсуждения... Если кому-то хочется указать мне, что я в чем-то не прав... ну... я просто человек...
Правда, кажется, на этот раз я прав...
... Цель конкурирующих компаний — господствовать на рынке, а не сохранить состояние конкуренции. /Джордж Сорос, финансист/
Здравствуйте, 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, я понимаю конечно, что подсчет суммы это дополнительное время, но как же без подсчета суммы....
Скоро выложу нормальный вариант, такой какой мы с тобой обговаривали....
Здравствуйте, shishkovsky.vladimir, Вы писали:
SV>Хорошо, ты говоришь, что считать не нужно от 1 до 100, а если на собеседовании дадут числа от 1 до 1565, ты тоже скажешь что их считать не надо, их сумма равна 1225395, я понимаю конечно, что подсчет суммы это дополнительное время, но как же без подсчета суммы....
Ну необходимо хотя бы принять во внимание тот факт, что это арифметическая прогрессия и использовать соответствующие формулы без цикла
1. Задча ставилась четко. И никаких 894589346 там не фигурировало. Только 100.
Если не понятно уже это, зачем продолжать???
2. Числа не упорядочены. Поэтому нужно либо брать дополнительный массив (лишний расход памяти), либо сортировать (время СРАЗУ ВОЗРАСТАЕТ с О(n) до МИНИМУМ О(n)log(n)). Тут хоть спорь, хоть нет.
3. Это элементарная задача, не стоящая, чтоб на нее тратили время. Если тебе очень хочется что-либо порешать и доказать мне — вперед. Задачи с ACM для этого вполне подойдут. Динамическае программирование, графы, методы ветвей и границ, перебор с отсечениями и т.д. и т.п. Все что угодно!!! Дерзай!!! На любом языке начиная с C# и заканчивая FORTRAN'ом.
Сорри за оффтоп...