» Poradna » Programy

C# - Čas proccesu

Odpovědět  |  Zobrazit bez stromu  |  Upozornit redakci  |  nových odpovědí: 23/23
 |   |  Microsoft Windows 7 Chrome 45.0.2454.101  |  [176.107.123.---]

Zdravím, dostal jsem úkol změřit časovou náročnost Bubble Sortu v C#. Napsal jsem Bubble Sort a měřil to tak, že jsem vzal struktura DataTime a změřil systémový čas na začátku a na konci, udělal jejich rozdíl, ale bylo to k ničemu. Tak jsem vzal Stopwatch v tickách a vynásobil 100 a dostal čas v nano sekundách, ale to je taky špatně, protože to neměří čas pouze toho algoritmu, ale čas všeho co processor udělá mezi, pokud jsem to správně pochopil, tak procesor mezitím dělá ještě další úlohy, poradí mi prosím někdo, jak získat čas provádění pouze toho algoritmu. Díky za každou pomoc.

Odpovědi na otázku

 |   |  Microsoft Windows 10 Chrome 45.0.2454.101

https://msdn.microsoft.com/en-us/library/system.diag... (v=vs.110).aspxNicméně pokud v systému neběží nic náročného, tak se to od tvého původního měření nebude téměř lišit.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 45.0.2454.101  |  [176.107.123.---]

A tohle právě hodí stejný výsledek, jako StopWatch, v systému nemusí běžet nic náročného, stačí procesy na pozadí, ty taky něco žerou a učitel mě ujistil, že v C# je přímo funkce na změření čistého času jenom konkrétní věci a tu já hledám.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 45.0.2454.101

Procesy na pozadí v nezaneřáděném systému spotřebovávají maximálně 1 % CPU.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 45.0.2454.101  |  [176.107.123.---]

To já vím, ale Bubble Sort pro 20 čísel sežere sotva 0,03% processoru a když mi do toho lezou procesy, který mají 1%, tak nikdy nemůžu pomocí měření prokázat, že časová závislost Bubble sort je kvadratická, když mi do toho lezou tyhle procesy, tak měření hází náhodná čísla.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 45.0.2454.101

Měření časové náročnosti má smysl až u řádově větších polí. Měř to pro 100, 1000 a 10000. Pak to bude o něčem vypovídat.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 45.0.2454.101

A tohle by mělo opravdu vracet čistý čas CPU.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 45.0.2454.101  |  [62.24.87.---]

Časová náročnost algoritmů se neměří žádný timerem, ale (měla by se) vypočítává se na základě kroků algoritmu. Přečti si například toto: http://popular.fbmi.cvut.cz/it/Stranky/Slozitost-algo...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 45.0.2454.101

Pokud jsem to dobře pochopil, tak to ale chce ověřit empiricky.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 45.0.2454.101  |  [176.107.123.---]

Přesně tak, já vím, že je ta časová náročnost kvadratická, ale já to mám empiricky dokázat.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 45.0.2454.101  |  [62.24.87.---]

Stačí ukázat pomocí korektních matematických postupů, že odhad je správný a nikdy to neprovede více než daný počet kroků pro vstup o délce N.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 45.0.2454.101  |  [62.24.87.---]

Ještě bych dodal, že časová složitost algoritmu se většinou udává pro velikost vstupu.. například n.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 45.0.2454.101  |  [176.107.123.---]

Tohle já všechno vím, a já mám právě změřit třeba pro 10 prvků a spočítat z toho kolik to bude třeba pro 30 a pak to změřit a to jsem udělal a absolutně ty hodnoty nesedí a to je právě ten problém, který jsem výše popsal.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 45.0.2454.101  |  [62.24.87.---]

No, rozepiš jak bubble sort funguje. Počítej například počet porovnání. Jakmile vytvoříš obecný vzorec pro počet porovnání. Máš vyhráno.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 45.0.2454.101  |  [176.107.123.---]

Počítat kolik by to mělo být umím, ale já to mám změřit, abych to dokázal, to znamená opravdu změřit a to potřebuju.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 45.0.2454.101  |  [62.24.87.---]

Pokud to máš měřit tak to se ti omlouvám. Moc mě zblbla škola

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 45.0.2454.101  |  [176.107.123.---]

Vpořádku ta škola tohle dělá

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 45.0.2454.101  |  [62.24.87.---]

Složitost algoritmů se počítá tak, že si počítáš kolik porovnání provede algoritmus v nejhorším případě, pro vstup o délky N. Pokud víš jak algoritmus funguje, tak si schopný usoudit obecný vzoreček pro počet porovnání (jak jsem již psal). Stačí si to udělat pro pole o délky 3-4-5 prvků a pak to bude jasný.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 45.0.2454.101

Pro tak malé hodnoty to nemá smysl. Druhá věc je, že to můžeš mít špatně naimplementované.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 45.0.2454.101  |  [176.107.123.---]

Ještě si to celý jednou projdu, jestli to mám opravdu všechno správně, ale myslím, že mám.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 45.0.2454.101  |  [85.92.45.---]

Nějaká ta milisekunda tam být musí. Záleží i na tom kolik čísel seřazuješ, na rychlosti procesoru, na to kolik dalších procesů ti procesor zatěžuje...ale budu parafrázovat NUDU. V jednom má pravdu. Ten cyklus seřazování prověď vídekrát, třeba 1 000 000x a výsledek poděl počtem opakování.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 45.0.2454.101  |  [176.107.123.---]

Ještě jsem dám obrázek, aby se dalo plně chápat, proč mi to nesedí.https://scontent-vie1-1.xx.fbcdn.net/hphotos-xfp1/t31.0-8/1203...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 7 Chrome 38.0.2103.0

A to ten politruk, co ti dal ten politický úkol ti neřekl, že máš měřit třeba ten sort zopakovat několik(>100000x) krát a/nebo pro určitý počet prvků, aby ses dostal na nějakou normální hodnotu času?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 45.0.2454.101  |  [85.92.45.---]

Ale pitchu Sedláku, na to stačí rozlišení milisekund. I takový jednoduchý cyklus řadící čísla o počtu třeba 100 (slovy řadí 100 čísel) může "vyrobit" výsledek, byť s rozlílem jedné milisekundy. Nebo pokud neošetříš rozdíl času před celou a po celé sekundě, tak ti vyplivne hauznumero.Jdi si raděj orat pole, sedláku.

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: Bubble



Určitě si přečtěte



Aktuální číslo časopisu Computer

26 procesorů v důkladném testu

Zhodnotili jsme 18 bezdrátových reproduktorů

Jak fungují cash back služby?

Pohlídejte své děti na internetu