<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Bioinformatyk.eu nowy serwis o bioinformatyce i programowaniu &#187; Matematyka</title>
	<atom:link href="http://www.bioinformatyk.eu/index.php/category/matematyka/feed" rel="self" type="application/rss+xml" />
	<link>http://www.bioinformatyk.eu</link>
	<description>Kolejna witryna oparta na WordPressie</description>
	<lastBuildDate>Thu, 19 Jan 2012 20:31:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Notacja asymptotyczna</title>
		<link>http://www.bioinformatyk.eu/index.php/matematyka/notacja-asymptotyczna.html</link>
		<comments>http://www.bioinformatyk.eu/index.php/matematyka/notacja-asymptotyczna.html#comments</comments>
		<pubDate>Sun, 20 Dec 2009 23:07:11 +0000</pubDate>
		<dc:creator>Justi</dc:creator>
				<category><![CDATA[Matematyka]]></category>
		<category><![CDATA[algorytmy]]></category>
		<category><![CDATA[metematyka]]></category>

		<guid isPermaLink="false">http://www.bioinformatyk.eu/?p=282</guid>
		<description><![CDATA[Dzisiaj będzie trochę teorii n.t. tzw. notacji asymptotycznej. jest ona używana do szacowania złożoności obliczeniowej algorytmów, dzięki czemu można w miarę dokładnie wyznaczyć takie parametry jak czas wykonywania się określonych instrukcji, rozmiar alokowanej pamięci itp. trochę na ten temat pisałam już tutaj. Przyjmijmy, że f(n) i g(n) są funkcjami (czyli np. czas), dla n→ ∞ [...]]]></description>
			<content:encoded><![CDATA[<p>Dzisiaj będzie trochę teorii n.t. tzw. notacji asymptotycznej. jest ona używana do szacowania złożoności obliczeniowej algorytmów, dzięki czemu można w miarę dokładnie wyznaczyć takie parametry jak czas wykonywania się określonych instrukcji, rozmiar alokowanej pamięci itp. trochę na ten temat pisałam już<a href="http://www.bioinformatyk.eu/programowanie/python/testowanie-zlozonosci-obliczeniowej-2-algorytmow-w-pythonie.html"> tutaj</a>.</p>
<p>Przyjmijmy, że f(n) i g(n) są funkcjami (czyli np. czas), dla n→ <strong><sub><span style="font-size: medium;">∞</span></sub></strong> , oraz g(n)  jest różna od 0, n będzie parametrem wejściowym, np wielkość tablicy do przetworzenia, długość łańcucha znaków, liczba obiektów itp. Poniżej przedstawiłam część teoretyczną odnośnie najczęściej stosowanych notacji zarówno z naukach matematycznych jak i informatycznych. Na dole znajdziesz wykresy obrazujące przykładowe funkcje.</p>
<p>A więc zaczynamy.</p>
<p><span style="font-size: large;">Notacja O </span></p>
<p><em><span style="font-size: large;"><span style="font-size: small;">(Czytaj &#8222;notacja duże O&#8221; lub &#8222;ograniczenie górne&#8221;)</span></span></em></p>
<p style="padding-left: 30px;"><em><em>Zapisujemy jako:</em></em><strong> f(n) = O(g(n))</strong></p>
<p><strong><span id="more-282"></span></strong>Taki zapis oznacza, że <strong>f jest co najwyżej rzędu g</strong>, czyli istnieje taka stała <em>c</em>, że:</p>
<p style="text-align: left; padding-left: 30px;">|f(n)| <strong>≤</strong><em> c</em> · |g(n)|</p>
<p>Czyli funkcja g(n) jest ograniczeniem górnym dla f (n).</p>
<ul>
<li> Jak sprawdzić, czy <em><em>f</em>(<em>n</em>) = <em>O</em>(<em>g</em>(<em>n</em>)) ?</em></li>
</ul>
<p>Upewniamy się, że <img src="http://www.bioinformatyk.eu/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_968_0506e8e6497d6528ea2945ff84b01b92.png" style="vertical-align:-32px; display: inline-block ;" alt="lim{n right infty}delim{|}{{f(x)}/{g(x)}}{|} < infty" title="lim{n right infty}delim{|}{{f(x)}/{g(x)}}{|} < infty"/></p>
<p>a konkretniej</p>
<p><img src="http://www.bioinformatyk.eu/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_968_843f501e7cd26cbbdfe5b31470e1adc5.png" style="vertical-align:-32px; display: inline-block ;" alt="lim{n right infty}0 < delim{|}{{f(x)}/{g(x)}}{|} right a,  a <> 0&#8243; title=&#8221;lim{n right infty}0 < delim{|}{{f(x)}/{g(x)}}{|} right a,  a <> 0&#8243;/>, o ile taka granica istnieje.<em><span style="font-size: large;"><span style="font-size: small;"> </span></span></em></p>
<p><em><span style="font-size: large;"><span style="font-size: small;">Przykładowy wykres:<br />
</span></span></em></p>
<p><span style="font-size: large;"><a href="http://www.bioinformatyk.eu/wp-content/uploads/2009/12/duze_o.png"><img class="alignleft size-full wp-image-311" title="Notacja duże O" src="http://www.bioinformatyk.eu/wp-content/uploads/2009/12/duze_o.png" alt="Notacja duże O" width="499" height="252" /></a><br />
</span></p>
<p><span style="font-size: large;">Notacja Ω</span></p>
<p><span style="font-size: large;"><em><span style="font-size: small;">(Czytaj &#8222;notacja duże omega&#8221; lub &#8222;ograniczenie dolne&#8221;)</span></em></span></p>
<p style="padding-left: 30px;"><em><em>Zapisujemy jako:</em></em><strong> f(n) = Ω(g(n))</strong></p>
<p>Taki zapis oznacza, że <strong>f jest co najmniej rzędu g</strong>, czyli istnieje taka stała <em>c</em>, że:</p>
<p style="padding-left: 30px;">|f(n)| ≥<em> c</em> ·| g(n)|</p>
<p>Czyli funkcja g(n) jest ograniczeniem dolnym dla f (n).</p>
<ul>
<li> Jak sprawdzić, czy <em><em>f</em>(<em>n</em>) = <em> </em>Ω(<em>g</em>(<em>n</em>)) ?</em></li>
</ul>
<p>Upewniamy się, że <img src="http://www.bioinformatyk.eu/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_968_1cb79636db97c5d5a31d25398e281c49.png" style="vertical-align:-32px; display: inline-block ;" alt="lim{n right infty}delim{|}{{f(x)}/{g(x)}}{|} > 0&#8243; title=&#8221;lim{n right infty}delim{|}{{f(x)}/{g(x)}}{|} > 0&#8243;/></p>
<p>a konkretniej</p>
<p><img src="http://www.bioinformatyk.eu/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_968_843f501e7cd26cbbdfe5b31470e1adc5.png" style="vertical-align:-32px; display: inline-block ;" alt="lim{n right infty}0 < delim{|}{{f(x)}/{g(x)}}{|} right a,  a <> 0&#8243; title=&#8221;lim{n right infty}0 < delim{|}{{f(x)}/{g(x)}}{|} right a,  a <> 0&#8243;/>, o ile taka granica istnieje.<em> </em></p>
<p><em>Przykładowy wykres:</em></p>
<p><span style="font-size: large;"><a href="http://www.bioinformatyk.eu/wp-content/uploads/2009/12/duze_omega.png"><img class="alignleft size-full wp-image-313" title="Notacja duże Omega" src="http://www.bioinformatyk.eu/wp-content/uploads/2009/12/duze_omega.png" alt="Notacja duże Omega" width="481" height="247" /></a><br />
</span></p>
<p><span style="font-size: large;">Notacja Θ</span></p>
<p><span style="font-size: large;"><em><span style="font-size: small;">(Czytaj &#8222;notacja kanapkowa&#8221; lub &#8222;teta&#8221;)</span></em></span></p>
<p style="padding-left: 30px;"><em><em>Zapisujemy jako:</em></em><strong> f(n) = Θ(g(n))</strong></p>
<p>Taki zapis oznacza, że <strong>f jest tego samego rzędu co g</strong>, czyli istnieją takie stałe <em>c</em><sub>1</sub> i c<sub>2</sub> że:</p>
<p style="padding-left: 30px;"><em>c</em><sub>1</sub> · |g(n)| ≤ |f(n)| <strong>≤</strong><em> c</em><sub>2</sub> · |g(n)|</p>
<p>Czyli funkcja g(n) jest ograniczeniem górnym dla f (n).</p>
<ul>
<li> Jak sprawdzić, czy <em><em>f</em>(<em>n</em>) = <em> </em>Θ(<em>g</em>(<em>n</em>)) ?</em></li>
</ul>
<p>Upewniamy się, że <img src="http://www.bioinformatyk.eu/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_968_2cd8cb957a6a4afe305d7d3ad14c124a.png" style="vertical-align:-32px; display: inline-block ;" alt="lim{n right infty}0 < delim{|}{{f(x)}/{g(x)}}{|} < infty" title="lim{n right infty}0 < delim{|}{{f(x)}/{g(x)}}{|} < infty"/> lub konkretniej <img src="http://www.bioinformatyk.eu/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_968_c943598f126d1d2f367a249c8eb7016e.png" style="vertical-align:-32px; display: inline-block ;" alt="lim{n right infty}0 < delim{|}{{f(x)}/{g(x)}}{|} right c,  c <> 0&#8243; title=&#8221;lim{n right infty}0 < delim{|}{{f(x)}/{g(x)}}{|} right c,  c <> 0&#8243;/>, o ile taka granica istnieje. Przykładowy wykres:</p>
<p><span style="font-size: large;"><em><span style="font-size: small;"><a href="http://www.bioinformatyk.eu/wp-content/uploads/2009/12/theta.png"><img class="alignleft size-full wp-image-314" title="Notacja kanapkowa" src="http://www.bioinformatyk.eu/wp-content/uploads/2009/12/theta.png" alt="Notacja kanapkowa, theta" width="481" height="247" /></a><br />
</span></em></span></p>
<p><span style="font-size: large;">Notacja o</span></p>
<p><em>(Czytaj &#8222;notacja małe o&#8221;)</em></p>
<p style="padding-left: 30px;"><em><em>Zapisujemy jako:</em></em><strong> f(n) = o(g(n))</strong></p>
<p>Taki zapis oznacza, że <strong>f jest rzędu mniejszego niż rząd g</strong>, czyli istnieje taka stała <em>c</em>, że:</p>
<p>|f(n)| <strong><em>&lt; </em></strong><em>c</em> · |g(n)|</p>
<ul>
<li> Jak sprawdzić, czy <em><em>f</em>(<em>n</em>) = o(<em>g</em>(<em>n</em>)) ?</em></li>
</ul>
<p>Upewniamy się, że <img src="http://www.bioinformatyk.eu/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_968_6c0ea4dc8f5b6d085677b1ebdda978dc.png" style="vertical-align:-32px; display: inline-block ;" alt="lim{n right infty}delim{|}{{f(x)}/{g(x)}}{|} right 0" title="lim{n right infty}delim{|}{{f(x)}/{g(x)}}{|} right 0"/> (o ile granica istnieje)</p>
<p><span style="font-size: large;">Notacja ω</span></p>
<p><em>(Czytaj &#8222;notacja małe omega&#8221;)</em></p>
<p style="padding-left: 30px;"><em><em>Zapisujemy jako:</em></em><strong> f(n) = o(g(n))</strong></p>
<p>Taki zapis oznacza, że <strong>f jest rzędu większego niż rząd g</strong>, czyli istnieje taka stała <em>c</em>, że:</p>
<p>|f(n)| <strong><em>&gt; </em></strong><em>c</em> · |g(n)|</p>
<ul>
<li> Jak sprawdzić, czy <em><em>f</em>(<em>n</em>) = o(<em>g</em>(<em>n</em>)) ?</em></li>
</ul>
<p>Upewniamy się, że <img src="http://www.bioinformatyk.eu/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_968_f59f8d77241c4e43c2fc2de78dcb36df.png" style="vertical-align:-32px; display: inline-block ;" alt="lim{n right infty}delim{|}{{f(x)}/{g(x)}}{|} right infty" title="lim{n right infty}delim{|}{{f(x)}/{g(x)}}{|} right infty"/> (o ile granica istnieje)</p>
<p><span style="font-size: large;">Notacja ~</span></p>
<p><em>(Czytaj &#8222;notacja falka&#8221;)</em></p>
<p><em><em>Zapisujemy jako:</em></em><strong> f(n) ~ g(n)</strong></p>
<p>Taki zapis oznacza, że nie tylko<strong> f jest rzędu równego co g</strong>, ale też, że<strong> f bardzo przypomina g</strong>.</p>
<ul>
<li> Jak sprawdzić, czy <em><em>f</em>(<em>n</em>) ~ <em>g</em>(<em>n</em>) ?</em></li>
</ul>
<p>Upewniamy się, że <img src="http://www.bioinformatyk.eu/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_968_201e1c8e3a77e42a4d13980143d4908f.png" style="vertical-align:-32px; display: inline-block ;" alt="lim{n right infty}delim{|}{{f(x)}/{g(x)}}{|} right 1" title="lim{n right infty}delim{|}{{f(x)}/{g(x)}}{|} right 1"/></p>
<p style="padding-left: 30px;">
<p style="padding-left: 30px;">Wszystkie 5 najważniejszych notacji można przedstawić na schemacie:</p>
<p style="padding-left: 30px;"><a href="http://www.bioinformatyk.eu/wp-content/uploads/2009/12/schemat.png"><img class="alignleft size-full wp-image-365" title="schemat-notacje" src="http://www.bioinformatyk.eu/wp-content/uploads/2009/12/schemat.png" alt="Schemat obrazujący notacje na przykładzie zbiorów" width="469" height="256" /></a></p>
<p style="padding-left: 240px;">
<p style="padding-left: 240px;">
<p style="padding-left: 240px;">
<p style="padding-left: 240px;">
<p style="padding-left: 240px;">
<p style="padding-left: 240px;">
<p style="padding-left: 240px;">
<p>Funkcje można uszeregować zgodnie<strong> ze wzrastającą złożonością</strong>:</p>
<p><strong>f(n) = O(1)</strong> – funkcja f(n) jest ograniczona przez funkcję stałą<br />
<strong>f(n) = O(log n)</strong> – funkcja f(n) jest ograniczona przez funkcję logarytmiczną</p>
<p><strong>f(n) = O(√n)</strong></p>
<p><strong>f(n) = O(log<sup>2</sup> n)</strong><br />
<strong>f(n) = O(n)</strong> – funkcja f(n) jest ograniczona przez funkcję liniową<br />
<strong>f(n) = O(n log n)</strong><br />
<strong>f(n) = O(n<sup>k</sup>) </strong>– funkcja f(n) jest ograniczona przez funkcję potęgową lub wielomian<br />
<strong>f(n) = O(a<sup>n</sup>)</strong> – funkcja f(n) jest ograniczona przez funkcję wykładniczą<br />
<strong>f(n) = O(n!)</strong> – funkcja f(n) jest ograniczona przez silnię</p>
<p><strong>f(n) = O(n<sup>n</sup>)</strong> – funkcja f(n) jest ograniczona przez funkcję potęgowo-wykładniczą</p>
<p>A oto przykładowe wykresy dla zrozumienia o czym mowa.</p>
<p><span style="font-size: small;"><em>Dla obliczeń zastosowałam podstawę logarytmu = 2</em></span>.</p>
<p><img title="Wykresy funkcji" src="http://spreadsheets.google.com/oimg?key=0Al2dPx-3IqEHdHRxUHY4YUlMUEMxNFB3YWppNU1qUUE&amp;oid=8&amp;v=1261348281733" alt="Wykresy funkcji" width="534" height="521" /></p>
<p>Zwróć uwagę, że funkcje √n i log(n) dla niewielkich n przyjmują prawie identyczne wartości. Jednak rząd funkcji √n jest większy od logarytmicznej. Podobną sytuację mamy dla funkcji liniowej n oraz log<sup>2</sup>n (log(n)*log(n)).</p>
<p>Z racji odmiennej skali przyjmowanych wartości postanowiłam umieścić 3 ostatnie funkcje na osobnym wykresie:</p>
<p><img title="Wykresy cd" src="http://spreadsheets.google.com/oimg?key=0Al2dPx-3IqEHdHRxUHY4YUlMUEMxNFB3YWppNU1qUUE&amp;oid=6&amp;v=1261349226061" alt="Wykresy cd" width="523" height="367" /></p>
<p>Jak widzisz, dla stosunkowo niewielkich n, wartości funkcji wyrażają się w milionach. Funkcja n<sup>n</sup> to funkcja o najwyższej urzędowości jaką udało mi się znaleźć.  Oczywiście można by rozważyć taki twór jak n!<sup>n!</sup> ale nie wiem, czy spotyka się go w realnych zastosowaniach informatycznych.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bioinformatyk.eu/index.php/matematyka/notacja-asymptotyczna.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

