<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="sr">
	<id>https://siwiki.rs/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bambula</id>
	<title>SI Wiki - Кориснички доприноси [sr]</title>
	<link rel="self" type="application/atom+xml" href="https://siwiki.rs/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bambula"/>
	<link rel="alternate" type="text/html" href="https://siwiki.rs/wiki/%D0%9F%D0%BE%D1%81%D0%B5%D0%B1%D0%BD%D0%BE:%D0%94%D0%BE%D0%BF%D1%80%D0%B8%D0%BD%D0%BE%D1%81%D0%B8/Bambula"/>
	<updated>2026-06-04T01:08:09Z</updated>
	<subtitle>Кориснички доприноси</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%98%D0%95%D0%9F/%D0%9A2_2024&amp;diff=8375</id>
		<title>ИЕП/К2 2024</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%98%D0%95%D0%9F/%D0%9A2_2024&amp;diff=8375"/>
		<updated>2026-05-23T14:00:07Z</updated>

		<summary type="html">&lt;p&gt;Bambula: /* Решење */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
{{нерешено}}&lt;br /&gt;
&#039;&#039;&#039;Други колоквијум 2024. године&#039;&#039;&#039; одржан је 21. априла. На колоквијуму су били доступни &#039;&#039;Spark&#039;&#039; документација, презентација са предавања, виртуелна машина коришћена на предавању и два текстуална фајла као примери уноса (без очекиваног исписа или примера параметара).&lt;br /&gt;
&lt;br /&gt;
== Поставка ==&lt;br /&gt;
Посматра се евиденција о редитељима и сценаристима ангажованим на неком филму. У једном реду се налазе: идентификатор филма, листа идентификатора редитеља, листа идентификатора сценариста.&lt;br /&gt;
Подаци о особама су дати у облику:&lt;br /&gt;
tconst (string) directors (array of nconsts) writers (array of nconsts)&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# У програмском језику Јава саставити МаpReduce програм користећи Spark који враћа статистичке податке о филмовима: минималан број редитеља, максималан број редитеља, и просечан број редитеља по филму, за филмове који имају барем једну особу која je на датом филму и сценариста и редитељ. Резултат je jедан ред укупно. Водити рачуна о конкурентности.&lt;br /&gt;
# У програмском језику Јава саставити МаpReduce програм користећи Spark који враћа статистичке податке за све особе које су на филмовима истовремено биле и редитељи и сценаристи: минималан број филмова, максималан број филмова, и просечан број филмова за филмове на којима je дата особа била и редитељ и сценариста, за редитеље који имају барем N унетих филмова (N параметар који се прослеђује рачунарима који раде обраду) на којима нису нужно били и сценаристи. Резултат je један ред укупно. Водити рачуна о конкурентности.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Одговор&amp;lt;sup&amp;gt;[sic]&amp;lt;/sup&amp;gt; се предају у виду два&amp;lt;sup&amp;gt;[sic]&amp;lt;/sup&amp;gt; јава датотека (&amp;lt;code&amp;gt;FilmoviProsek.java&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;OsobeProsek.java&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
За тестирање су били доступни исти фајлови као и са часова предавања, који се могу наћи у тиму предмета.&lt;br /&gt;
&lt;br /&gt;
[[Категорија:ИЕП]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
== Решење(1) ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
int[]r=sc.textFile(fileName)&lt;br /&gt;
        			.filter(line-&amp;gt;{&lt;br /&gt;
        				String[]p=line.split(&amp;quot;\t&amp;quot;);&lt;br /&gt;
                        if (p.length &amp;lt; 3 || p[1].equals(&amp;quot;\\N&amp;quot;) || p[2].equals(&amp;quot;\\N&amp;quot;))                                 return false;&lt;br /&gt;
                        &lt;br /&gt;
                        Set&amp;lt;String&amp;gt;redite=newHashSet&amp;lt;(Arrays.asList(p[1].split(&amp;quot;,&amp;quot;)));&lt;br /&gt;
                        for(String s:p[2].split(&amp;quot;,&amp;quot;)) {&lt;br /&gt;
                        	if(reditelji.contains(s))return true;&lt;br /&gt;
                        }&lt;br /&gt;
                        return false;&lt;br /&gt;
        			})&lt;br /&gt;
        		.map(line-&amp;gt;{&lt;br /&gt;
        			int n=line.split(&amp;quot;t&amp;quot;)[1].split(&amp;quot;,&amp;quot;).length;&lt;br /&gt;
        			return new int[] {n,n,n,1};&lt;br /&gt;
        		})&lt;br /&gt;
        		.reduce((a,b)-&amp;gt;new int[] {&lt;br /&gt;
        				Math.min(a[0], b[0]),&lt;br /&gt;
        				Math.max(a[1], b[1]),&lt;br /&gt;
        				a[2]+b[2],&lt;br /&gt;
        				a[3]+b[3]&lt;br /&gt;
        		});&lt;br /&gt;
            System.out.println(&amp;quot;Min: &amp;quot; + r[0] + &amp;quot;, Max: &amp;quot; + r[1] + &amp;quot;, Avg: &amp;quot; + (r[2] * 1.0 / r[3]));&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Решење(2) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;     &lt;br /&gt;
        	int[]r=sc.textFile(fileName)&lt;br /&gt;
        			.flatMapToPair(line-&amp;gt;{&lt;br /&gt;
        				List&amp;lt;Tuple2&amp;lt;String,int[]&amp;gt;&amp;gt;out=new LinkedList&amp;lt;&amp;gt;();&lt;br /&gt;
        				String[]p=line.split(&amp;quot;\t&amp;quot;);&lt;br /&gt;
                        if (p.length &amp;lt; 3 || p[1].equals(&amp;quot;\\N&amp;quot;)) return out.iterator();&lt;br /&gt;
        			&lt;br /&gt;
                        String[]reditelji=p[1].split(&amp;quot;,&amp;quot;);&lt;br /&gt;
                        Set&amp;lt;String&amp;gt; scenaristi = p[2].equals(&amp;quot;\\N&amp;quot;) &lt;br /&gt;
                                ? new HashSet&amp;lt;&amp;gt;() &lt;br /&gt;
                                : new HashSet&amp;lt;&amp;gt;(Arrays.asList(p[2].split(&amp;quot;,&amp;quot;)));&lt;br /&gt;
                      for(String red:reditelji) {&lt;br /&gt;
                    	  if(scenaristi.contains(red)) {&lt;br /&gt;
                    		  out.add(new Tuple2&amp;lt;&amp;gt;(red,new int[]{1,1}));&lt;br /&gt;
                    	  }&lt;br /&gt;
                    	  else {&lt;br /&gt;
                    		  out.add(new Tuple2&amp;lt;&amp;gt;(red,new int[]{1,0}));&lt;br /&gt;
                    	  }&lt;br /&gt;
                      }&lt;br /&gt;
                      return out.iterator();&lt;br /&gt;
        			})&lt;br /&gt;
                    .reduceByKey((a,b)-&amp;gt;new int[]{&lt;br /&gt;
                    	a[0]+b[0],&lt;br /&gt;
                    	a[1]+b[1]&lt;br /&gt;
                    })&lt;br /&gt;
                    .filter(t-&amp;gt;t._2[0]&amp;gt;=N&amp;amp;&amp;amp;t._2[1]&amp;gt;=1)&lt;br /&gt;
                    .map(t-&amp;gt;{&lt;br /&gt;
                    	int b=t._2[1];&lt;br /&gt;
                    	return new int[]{b,b,b,1};&lt;br /&gt;
                    })&lt;br /&gt;
                    .reduce((a, b) -&amp;gt; new int[]{&lt;br /&gt;
                            Math.min(a[0], b[0]),&lt;br /&gt;
                            Math.max(a[1], b[1]),&lt;br /&gt;
                            a[2] + b[2],&lt;br /&gt;
                            a[3] + b[3]&lt;br /&gt;
                        });&lt;br /&gt;
&lt;br /&gt;
                    System.out.println(&amp;quot;Min: &amp;quot; + r[0] + &amp;quot;, Max: &amp;quot; + r[1] + &amp;quot;, Avg: &amp;quot; + (r[2] * 1.0 / r[3]));&lt;br /&gt;
                    &amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bambula</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%98%D0%95%D0%9F/%D0%9A2_2024&amp;diff=8374</id>
		<title>ИЕП/К2 2024</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%98%D0%95%D0%9F/%D0%9A2_2024&amp;diff=8374"/>
		<updated>2026-05-23T13:59:25Z</updated>

		<summary type="html">&lt;p&gt;Bambula: /* Решење */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
{{нерешено}}&lt;br /&gt;
&#039;&#039;&#039;Други колоквијум 2024. године&#039;&#039;&#039; одржан је 21. априла. На колоквијуму су били доступни &#039;&#039;Spark&#039;&#039; документација, презентација са предавања, виртуелна машина коришћена на предавању и два текстуална фајла као примери уноса (без очекиваног исписа или примера параметара).&lt;br /&gt;
&lt;br /&gt;
== Поставка ==&lt;br /&gt;
Посматра се евиденција о редитељима и сценаристима ангажованим на неком филму. У једном реду се налазе: идентификатор филма, листа идентификатора редитеља, листа идентификатора сценариста.&lt;br /&gt;
Подаци о особама су дати у облику:&lt;br /&gt;
tconst (string) directors (array of nconsts) writers (array of nconsts)&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# У програмском језику Јава саставити МаpReduce програм користећи Spark који враћа статистичке податке о филмовима: минималан број редитеља, максималан број редитеља, и просечан број редитеља по филму, за филмове који имају барем једну особу која je на датом филму и сценариста и редитељ. Резултат je jедан ред укупно. Водити рачуна о конкурентности.&lt;br /&gt;
# У програмском језику Јава саставити МаpReduce програм користећи Spark који враћа статистичке податке за све особе које су на филмовима истовремено биле и редитељи и сценаристи: минималан број филмова, максималан број филмова, и просечан број филмова за филмове на којима je дата особа била и редитељ и сценариста, за редитеље који имају барем N унетих филмова (N параметар који се прослеђује рачунарима који раде обраду) на којима нису нужно били и сценаристи. Резултат je један ред укупно. Водити рачуна о конкурентности.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Одговор&amp;lt;sup&amp;gt;[sic]&amp;lt;/sup&amp;gt; се предају у виду два&amp;lt;sup&amp;gt;[sic]&amp;lt;/sup&amp;gt; јава датотека (&amp;lt;code&amp;gt;FilmoviProsek.java&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;OsobeProsek.java&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
За тестирање су били доступни исти фајлови као и са часова предавања, који се могу наћи у тиму предмета.&lt;br /&gt;
&lt;br /&gt;
[[Категорија:ИЕП]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
== Решење ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
int[]r=sc.textFile(fileName)&lt;br /&gt;
        			.filter(line-&amp;gt;{&lt;br /&gt;
        				String[]p=line.split(&amp;quot;\t&amp;quot;);&lt;br /&gt;
                        if (p.length &amp;lt; 3 || p[1].equals(&amp;quot;\\N&amp;quot;) || p[2].equals(&amp;quot;\\N&amp;quot;))                                 return false;&lt;br /&gt;
                        &lt;br /&gt;
                        Set&amp;lt;String&amp;gt;redite=newHashSet&amp;lt;(Arrays.asList(p[1].split(&amp;quot;,&amp;quot;)));&lt;br /&gt;
                        for(String s:p[2].split(&amp;quot;,&amp;quot;)) {&lt;br /&gt;
                        	if(reditelji.contains(s))return true;&lt;br /&gt;
                        }&lt;br /&gt;
                        return false;&lt;br /&gt;
        			})&lt;br /&gt;
        		.map(line-&amp;gt;{&lt;br /&gt;
        			int n=line.split(&amp;quot;t&amp;quot;)[1].split(&amp;quot;,&amp;quot;).length;&lt;br /&gt;
        			return new int[] {n,n,n,1};&lt;br /&gt;
        		})&lt;br /&gt;
        		.reduce((a,b)-&amp;gt;new int[] {&lt;br /&gt;
        				Math.min(a[0], b[0]),&lt;br /&gt;
        				Math.max(a[1], b[1]),&lt;br /&gt;
        				a[2]+b[2],&lt;br /&gt;
        				a[3]+b[3]&lt;br /&gt;
        		});&lt;br /&gt;
            System.out.println(&amp;quot;Min: &amp;quot; + r[0] + &amp;quot;, Max: &amp;quot; + r[1] + &amp;quot;, Avg: &amp;quot; + (r[2] * 1.0 / r[3]));&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bambula</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%98%D0%95%D0%9F/%D0%9A2_2024&amp;diff=8373</id>
		<title>ИЕП/К2 2024</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%98%D0%95%D0%9F/%D0%9A2_2024&amp;diff=8373"/>
		<updated>2026-05-23T13:59:17Z</updated>

		<summary type="html">&lt;p&gt;Bambula: /* Решење */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
{{нерешено}}&lt;br /&gt;
&#039;&#039;&#039;Други колоквијум 2024. године&#039;&#039;&#039; одржан је 21. априла. На колоквијуму су били доступни &#039;&#039;Spark&#039;&#039; документација, презентација са предавања, виртуелна машина коришћена на предавању и два текстуална фајла као примери уноса (без очекиваног исписа или примера параметара).&lt;br /&gt;
&lt;br /&gt;
== Поставка ==&lt;br /&gt;
Посматра се евиденција о редитељима и сценаристима ангажованим на неком филму. У једном реду се налазе: идентификатор филма, листа идентификатора редитеља, листа идентификатора сценариста.&lt;br /&gt;
Подаци о особама су дати у облику:&lt;br /&gt;
tconst (string) directors (array of nconsts) writers (array of nconsts)&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# У програмском језику Јава саставити МаpReduce програм користећи Spark који враћа статистичке податке о филмовима: минималан број редитеља, максималан број редитеља, и просечан број редитеља по филму, за филмове који имају барем једну особу која je на датом филму и сценариста и редитељ. Резултат je jедан ред укупно. Водити рачуна о конкурентности.&lt;br /&gt;
# У програмском језику Јава саставити МаpReduce програм користећи Spark који враћа статистичке податке за све особе које су на филмовима истовремено биле и редитељи и сценаристи: минималан број филмова, максималан број филмова, и просечан број филмова за филмове на којима je дата особа била и редитељ и сценариста, за редитеље који имају барем N унетих филмова (N параметар који се прослеђује рачунарима који раде обраду) на којима нису нужно били и сценаристи. Резултат je један ред укупно. Водити рачуна о конкурентности.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Одговор&amp;lt;sup&amp;gt;[sic]&amp;lt;/sup&amp;gt; се предају у виду два&amp;lt;sup&amp;gt;[sic]&amp;lt;/sup&amp;gt; јава датотека (&amp;lt;code&amp;gt;FilmoviProsek.java&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;OsobeProsek.java&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
За тестирање су били доступни исти фајлови као и са часова предавања, који се могу наћи у тиму предмета.&lt;br /&gt;
&lt;br /&gt;
[[Категорија:ИЕП]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
== Решење ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int[]r=sc.textFile(fileName)&lt;br /&gt;
        			.filter(line-&amp;gt;{&lt;br /&gt;
        				String[]p=line.split(&amp;quot;\t&amp;quot;);&lt;br /&gt;
                        if (p.length &amp;lt; 3 || p[1].equals(&amp;quot;\\N&amp;quot;) || p[2].equals(&amp;quot;\\N&amp;quot;))                                 return false;&lt;br /&gt;
                        &lt;br /&gt;
                        Set&amp;lt;String&amp;gt;redite=newHashSet&amp;lt;(Arrays.asList(p[1].split(&amp;quot;,&amp;quot;)));&lt;br /&gt;
                        for(String s:p[2].split(&amp;quot;,&amp;quot;)) {&lt;br /&gt;
                        	if(reditelji.contains(s))return true;&lt;br /&gt;
                        }&lt;br /&gt;
                        return false;&lt;br /&gt;
        			})&lt;br /&gt;
        		.map(line-&amp;gt;{&lt;br /&gt;
        			int n=line.split(&amp;quot;t&amp;quot;)[1].split(&amp;quot;,&amp;quot;).length;&lt;br /&gt;
        			return new int[] {n,n,n,1};&lt;br /&gt;
        		})&lt;br /&gt;
        		.reduce((a,b)-&amp;gt;new int[] {&lt;br /&gt;
        				Math.min(a[0], b[0]),&lt;br /&gt;
        				Math.max(a[1], b[1]),&lt;br /&gt;
        				a[2]+b[2],&lt;br /&gt;
        				a[3]+b[3]&lt;br /&gt;
        		});&lt;br /&gt;
            System.out.println(&amp;quot;Min: &amp;quot; + r[0] + &amp;quot;, Max: &amp;quot; + r[1] + &amp;quot;, Avg: &amp;quot; + (r[2] * 1.0 / r[3]));&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bambula</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%98%D0%95%D0%9F/%D0%9A2_2024&amp;diff=8372</id>
		<title>ИЕП/К2 2024</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%98%D0%95%D0%9F/%D0%9A2_2024&amp;diff=8372"/>
		<updated>2026-05-23T13:58:21Z</updated>

		<summary type="html">&lt;p&gt;Bambula: /* Решење */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
{{нерешено}}&lt;br /&gt;
&#039;&#039;&#039;Други колоквијум 2024. године&#039;&#039;&#039; одржан је 21. априла. На колоквијуму су били доступни &#039;&#039;Spark&#039;&#039; документација, презентација са предавања, виртуелна машина коришћена на предавању и два текстуална фајла као примери уноса (без очекиваног исписа или примера параметара).&lt;br /&gt;
&lt;br /&gt;
== Поставка ==&lt;br /&gt;
Посматра се евиденција о редитељима и сценаристима ангажованим на неком филму. У једном реду се налазе: идентификатор филма, листа идентификатора редитеља, листа идентификатора сценариста.&lt;br /&gt;
Подаци о особама су дати у облику:&lt;br /&gt;
tconst (string) directors (array of nconsts) writers (array of nconsts)&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# У програмском језику Јава саставити МаpReduce програм користећи Spark који враћа статистичке податке о филмовима: минималан број редитеља, максималан број редитеља, и просечан број редитеља по филму, за филмове који имају барем једну особу која je на датом филму и сценариста и редитељ. Резултат je jедан ред укупно. Водити рачуна о конкурентности.&lt;br /&gt;
# У програмском језику Јава саставити МаpReduce програм користећи Spark који враћа статистичке податке за све особе које су на филмовима истовремено биле и редитељи и сценаристи: минималан број филмова, максималан број филмова, и просечан број филмова за филмове на којима je дата особа била и редитељ и сценариста, за редитеље који имају барем N унетих филмова (N параметар који се прослеђује рачунарима који раде обраду) на којима нису нужно били и сценаристи. Резултат je један ред укупно. Водити рачуна о конкурентности.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Одговор&amp;lt;sup&amp;gt;[sic]&amp;lt;/sup&amp;gt; се предају у виду два&amp;lt;sup&amp;gt;[sic]&amp;lt;/sup&amp;gt; јава датотека (&amp;lt;code&amp;gt;FilmoviProsek.java&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;OsobeProsek.java&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
За тестирање су били доступни исти фајлови као и са часова предавања, који се могу наћи у тиму предмета.&lt;br /&gt;
&lt;br /&gt;
[[Категорија:ИЕП]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
== Решење ==&lt;br /&gt;
        	int[]r=sc.textFile(fileName)&lt;br /&gt;
        			.filter(line-&amp;gt;{&lt;br /&gt;
        				String[]p=line.split(&amp;quot;\t&amp;quot;);&lt;br /&gt;
                        if (p.length &amp;lt; 3 || p[1].equals(&amp;quot;\\N&amp;quot;) || p[2].equals(&amp;quot;\\N&amp;quot;))                                 return false;&lt;br /&gt;
                        &lt;br /&gt;
                        Set&amp;lt;String&amp;gt;redite=newHashSet&amp;lt;(Arrays.asList(p[1].split(&amp;quot;,&amp;quot;)));&lt;br /&gt;
                        for(String s:p[2].split(&amp;quot;,&amp;quot;)) {&lt;br /&gt;
                        	if(reditelji.contains(s))return true;&lt;br /&gt;
                        }&lt;br /&gt;
                        return false;&lt;br /&gt;
        			})&lt;br /&gt;
        		.map(line-&amp;gt;{&lt;br /&gt;
        			int n=line.split(&amp;quot;t&amp;quot;)[1].split(&amp;quot;,&amp;quot;).length;&lt;br /&gt;
        			return new int[] {n,n,n,1};&lt;br /&gt;
        		})&lt;br /&gt;
        		.reduce((a,b)-&amp;gt;new int[] {&lt;br /&gt;
        				Math.min(a[0], b[0]),&lt;br /&gt;
        				Math.max(a[1], b[1]),&lt;br /&gt;
        				a[2]+b[2],&lt;br /&gt;
        				a[3]+b[3]&lt;br /&gt;
        		});&lt;br /&gt;
            System.out.println(&amp;quot;Min: &amp;quot; + r[0] + &amp;quot;, Max: &amp;quot; + r[1] + &amp;quot;, Avg: &amp;quot; + (r[2] * 1.0 / r[3]));&lt;/div&gt;</summary>
		<author><name>Bambula</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%98%D0%95%D0%9F/%D0%9A2_2024&amp;diff=8371</id>
		<title>ИЕП/К2 2024</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%98%D0%95%D0%9F/%D0%9A2_2024&amp;diff=8371"/>
		<updated>2026-05-23T13:58:11Z</updated>

		<summary type="html">&lt;p&gt;Bambula: /* Решење */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
{{нерешено}}&lt;br /&gt;
&#039;&#039;&#039;Други колоквијум 2024. године&#039;&#039;&#039; одржан је 21. априла. На колоквијуму су били доступни &#039;&#039;Spark&#039;&#039; документација, презентација са предавања, виртуелна машина коришћена на предавању и два текстуална фајла као примери уноса (без очекиваног исписа или примера параметара).&lt;br /&gt;
&lt;br /&gt;
== Поставка ==&lt;br /&gt;
Посматра се евиденција о редитељима и сценаристима ангажованим на неком филму. У једном реду се налазе: идентификатор филма, листа идентификатора редитеља, листа идентификатора сценариста.&lt;br /&gt;
Подаци о особама су дати у облику:&lt;br /&gt;
tconst (string) directors (array of nconsts) writers (array of nconsts)&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# У програмском језику Јава саставити МаpReduce програм користећи Spark који враћа статистичке податке о филмовима: минималан број редитеља, максималан број редитеља, и просечан број редитеља по филму, за филмове који имају барем једну особу која je на датом филму и сценариста и редитељ. Резултат je jедан ред укупно. Водити рачуна о конкурентности.&lt;br /&gt;
# У програмском језику Јава саставити МаpReduce програм користећи Spark који враћа статистичке податке за све особе које су на филмовима истовремено биле и редитељи и сценаристи: минималан број филмова, максималан број филмова, и просечан број филмова за филмове на којима je дата особа била и редитељ и сценариста, за редитеље који имају барем N унетих филмова (N параметар који се прослеђује рачунарима који раде обраду) на којима нису нужно били и сценаристи. Резултат je један ред укупно. Водити рачуна о конкурентности.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Одговор&amp;lt;sup&amp;gt;[sic]&amp;lt;/sup&amp;gt; се предају у виду два&amp;lt;sup&amp;gt;[sic]&amp;lt;/sup&amp;gt; јава датотека (&amp;lt;code&amp;gt;FilmoviProsek.java&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;OsobeProsek.java&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
За тестирање су били доступни исти фајлови као и са часова предавања, који се могу наћи у тиму предмета.&lt;br /&gt;
&lt;br /&gt;
[[Категорија:ИЕП]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
== Решење ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
        	int[]r=sc.textFile(fileName)&lt;br /&gt;
        			.filter(line-&amp;gt;{&lt;br /&gt;
        				String[]p=line.split(&amp;quot;\t&amp;quot;);&lt;br /&gt;
                        if (p.length &amp;lt; 3 || p[1].equals(&amp;quot;\\N&amp;quot;) || p[2].equals(&amp;quot;\\N&amp;quot;))                                 return false;&lt;br /&gt;
                        &lt;br /&gt;
                        Set&amp;lt;String&amp;gt;redite=newHashSet&amp;lt;(Arrays.asList(p[1].split(&amp;quot;,&amp;quot;)));&lt;br /&gt;
                        for(String s:p[2].split(&amp;quot;,&amp;quot;)) {&lt;br /&gt;
                        	if(reditelji.contains(s))return true;&lt;br /&gt;
                        }&lt;br /&gt;
                        return false;&lt;br /&gt;
        			})&lt;br /&gt;
        		.map(line-&amp;gt;{&lt;br /&gt;
        			int n=line.split(&amp;quot;t&amp;quot;)[1].split(&amp;quot;,&amp;quot;).length;&lt;br /&gt;
        			return new int[] {n,n,n,1};&lt;br /&gt;
        		})&lt;br /&gt;
        		.reduce((a,b)-&amp;gt;new int[] {&lt;br /&gt;
        				Math.min(a[0], b[0]),&lt;br /&gt;
        				Math.max(a[1], b[1]),&lt;br /&gt;
        				a[2]+b[2],&lt;br /&gt;
        				a[3]+b[3]&lt;br /&gt;
        		});&lt;br /&gt;
            System.out.println(&amp;quot;Min: &amp;quot; + r[0] + &amp;quot;, Max: &amp;quot; + r[1] + &amp;quot;, Avg: &amp;quot; + (r[2] * 1.0 / r[3]));&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bambula</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%98%D0%95%D0%9F/%D0%9A2_2024&amp;diff=8370</id>
		<title>ИЕП/К2 2024</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%98%D0%95%D0%9F/%D0%9A2_2024&amp;diff=8370"/>
		<updated>2026-05-23T13:39:40Z</updated>

		<summary type="html">&lt;p&gt;Bambula: /* Resenje*/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
{{нерешено}}&lt;br /&gt;
&#039;&#039;&#039;Други колоквијум 2024. године&#039;&#039;&#039; одржан је 21. априла. На колоквијуму су били доступни &#039;&#039;Spark&#039;&#039; документација, презентација са предавања, виртуелна машина коришћена на предавању и два текстуална фајла као примери уноса (без очекиваног исписа или примера параметара).&lt;br /&gt;
&lt;br /&gt;
== Поставка ==&lt;br /&gt;
Посматра се евиденција о редитељима и сценаристима ангажованим на неком филму. У једном реду се налазе: идентификатор филма, листа идентификатора редитеља, листа идентификатора сценариста.&lt;br /&gt;
Подаци о особама су дати у облику:&lt;br /&gt;
tconst (string) directors (array of nconsts) writers (array of nconsts)&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# У програмском језику Јава саставити МаpReduce програм користећи Spark који враћа статистичке податке о филмовима: минималан број редитеља, максималан број редитеља, и просечан број редитеља по филму, за филмове који имају барем једну особу која je на датом филму и сценариста и редитељ. Резултат je jедан ред укупно. Водити рачуна о конкурентности.&lt;br /&gt;
# У програмском језику Јава саставити МаpReduce програм користећи Spark који враћа статистичке податке за све особе које су на филмовима истовремено биле и редитељи и сценаристи: минималан број филмова, максималан број филмова, и просечан број филмова за филмове на којима je дата особа била и редитељ и сценариста, за редитеље који имају барем N унетих филмова (N параметар који се прослеђује рачунарима који раде обраду) на којима нису нужно били и сценаристи. Резултат je један ред укупно. Водити рачуна о конкурентности.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Одговор&amp;lt;sup&amp;gt;[sic]&amp;lt;/sup&amp;gt; се предају у виду два&amp;lt;sup&amp;gt;[sic]&amp;lt;/sup&amp;gt; јава датотека (&amp;lt;code&amp;gt;FilmoviProsek.java&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;OsobeProsek.java&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
За тестирање су били доступни исти фајлови као и са часова предавања, који се могу наћи у тиму предмета.&lt;br /&gt;
&lt;br /&gt;
[[Категорија:ИЕП]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
== Решење ==&lt;br /&gt;
&lt;br /&gt;
        	int[]r=sc.textFile(fileName)&lt;br /&gt;
        			.filter(line-&amp;gt;{&lt;br /&gt;
        				String[]p=line.split(&amp;quot;\t&amp;quot;);&lt;br /&gt;
                        if (p.length &amp;lt; 3 || p[1].equals(&amp;quot;\\N&amp;quot;) || p[2].equals(&amp;quot;\\N&amp;quot;))                                 return false;&lt;br /&gt;
                        &lt;br /&gt;
                        Set&amp;lt;String&amp;gt;redite=newHashSet&amp;lt;(Arrays.asList(p[1].split(&amp;quot;,&amp;quot;)));&lt;br /&gt;
                        for(String s:p[2].split(&amp;quot;,&amp;quot;)) {&lt;br /&gt;
                        	if(reditelji.contains(s))return true;&lt;br /&gt;
                        }&lt;br /&gt;
                        return false;&lt;br /&gt;
        			})&lt;br /&gt;
        		.map(line-&amp;gt;{&lt;br /&gt;
        			int n=line.split(&amp;quot;t&amp;quot;)[1].split(&amp;quot;,&amp;quot;).length;&lt;br /&gt;
        			return new int[] {n,n,n,1};&lt;br /&gt;
        		})&lt;br /&gt;
        		.reduce((a,b)-&amp;gt;new int[] {&lt;br /&gt;
        				Math.min(a[0], b[0]),&lt;br /&gt;
        				Math.max(a[1], b[1]),&lt;br /&gt;
        				a[2]+b[2],&lt;br /&gt;
        				a[3]+b[3]&lt;br /&gt;
        		});&lt;br /&gt;
            System.out.println(&amp;quot;Min: &amp;quot; + r[0] + &amp;quot;, Max: &amp;quot; + r[1] + &amp;quot;, Avg: &amp;quot; + (r[2] * 1.0 / r[3]));&lt;/div&gt;</summary>
		<author><name>Bambula</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%98%D0%95%D0%9F/%D0%9A2_%D0%A1%D0%B5%D0%BF%D1%82%D0%B5%D0%BC%D0%B1%D0%B0%D1%80_1_2025&amp;diff=8369</id>
		<title>ИЕП/К2 Септембар 1 2025</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%98%D0%95%D0%9F/%D0%9A2_%D0%A1%D0%B5%D0%BF%D1%82%D0%B5%D0%BC%D0%B1%D0%B0%D1%80_1_2025&amp;diff=8369"/>
		<updated>2026-05-23T13:33:44Z</updated>

		<summary type="html">&lt;p&gt;Bambula: /* Решење */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
{{нерешено}}&lt;br /&gt;
&#039;&#039;&#039;Други колоквијум у року септембар 1 2025&#039;&#039;&#039; одржан је 11. септембра. На колоквијуму су били доступни &#039;&#039;Spark&#039;&#039; документација, презентација са предавања, виртуелна машина коришћена на предавању и два текстуална фајла као примери уноса (без очекиваног исписа или примера параметара). Трајао је 60 минута.&lt;br /&gt;
&lt;br /&gt;
== Поставка ==&lt;br /&gt;
Посматра се евиденција о особама ангажованим на филмовима. Подаци о особама су дати у облику:&lt;br /&gt;
&#039;&#039;nconst (string), primaryName, birthYear, deathYear, primaryProfession (array of strings), knownForTitles (array of tconsts)&#039;&#039;&lt;br /&gt;
* У програмском језику Јава саставити Map/Reduce програм користећи Spark који враћа податке о филму по коме је највише особа познато. Ако има више филмова са тим максималним бројем вратити податке за све те филмове. Подаци о филму треба да садрже шифру филма (&#039;&#039;tconsts&#039;&#039;) и низ особа које су познате по том филму (&#039;&#039;array of nconst&#039;&#039;). Водити рачуна о конкурентности.&lt;br /&gt;
&lt;br /&gt;
Одговор се предаје у виду два Јава датотеке (&#039;&#039;FilmsMaxKnownFor.java&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== Решење ==&lt;br /&gt;
&lt;br /&gt;
[[Категорија:ИЕП]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
    	JavaPairRDD&amp;lt;String,List&amp;lt;String&amp;gt;&amp;gt;filmOsobe=sc.textFile(fileName)&lt;br /&gt;
        		.flatMapToPair(line-&amp;gt;{&lt;br /&gt;
        			List&amp;lt;Tuple2&amp;lt;String,List&amp;lt;String&amp;gt;&amp;gt;&amp;gt;out=new LinkedList&amp;lt;&amp;gt;();&lt;br /&gt;
        			String[]p=line.split(&amp;quot;\t&amp;quot;);&lt;br /&gt;
                    if (p.length &amp;lt; 6 || p[5].equals(&amp;quot;\\N&amp;quot;)) return out.iterator();&lt;br /&gt;
                    &lt;br /&gt;
                    String osoba=p[0];&lt;br /&gt;
                    String[]filmovi=p[5].split(&amp;quot;,&amp;quot;);&lt;br /&gt;
                    for(String film:filmovi) {&lt;br /&gt;
                    	List&amp;lt;String&amp;gt;jedna=new ArrayList&amp;lt;&amp;gt;();&lt;br /&gt;
                    	jedna.add(osoba);&lt;br /&gt;
                    	out.add(new Tuple2&amp;lt;&amp;gt;(film,jedna));&lt;br /&gt;
                    }&lt;br /&gt;
                    return out.iterator();&lt;br /&gt;
        		})&lt;br /&gt;
        		.reduceByKey((a,b)-&amp;gt;{&lt;br /&gt;
        			List&amp;lt;String&amp;gt;spojeno=new ArrayList&amp;lt;&amp;gt;(a);&lt;br /&gt;
        			spojeno.addAll(b);&lt;br /&gt;
        			return spojeno;&lt;br /&gt;
        		})&lt;br /&gt;
        		.cache();&lt;br /&gt;
        	&lt;br /&gt;
        	int max=filmOsobe.map(t-&amp;gt;t._2.size()).reduce(Math::max);&lt;br /&gt;
        	&lt;br /&gt;
        	List&amp;lt;Tuple2&amp;lt;String,List&amp;lt;String&amp;gt;&amp;gt;&amp;gt;rezultat=filmOsobe&lt;br /&gt;
        			.filter(t-&amp;gt;t._2.size()==max)&lt;br /&gt;
        			.collect();&lt;br /&gt;
        	 System.out.println(&amp;quot;Max broj osoba: &amp;quot; + max);&lt;br /&gt;
             for (Tuple2&amp;lt;String, List&amp;lt;String&amp;gt;&amp;gt; film : rezultat) {&lt;br /&gt;
                 System.out.println(&amp;quot;Film: &amp;quot; + film._1 + &amp;quot; | Osobe: &amp;quot; + film._2);&lt;br /&gt;
             }&lt;/div&gt;</summary>
		<author><name>Bambula</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%9C%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%98%D0%B5_%D0%BE%D0%BA%D1%82%D0%BE%D0%B1%D0%B0%D1%80_2025&amp;diff=8323</id>
		<title>ОС1/Модификације октобар 2025</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%9C%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%98%D0%B5_%D0%BE%D0%BA%D1%82%D0%BE%D0%B1%D0%B0%D1%80_2025&amp;diff=8323"/>
		<updated>2026-03-10T14:03:04Z</updated>

		<summary type="html">&lt;p&gt;Bambula: /* Modifikacija: joinAll */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Modifikacija: joinAll (30p) ==&lt;br /&gt;
&lt;br /&gt;
Doodati sistemske pozive &amp;lt;code&amp;gt;thread_add_child&amp;lt;/code&amp;gt; i &amp;lt;code&amp;gt;thread_join_all&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;code&amp;gt;thread_add_child&amp;lt;/code&amp;gt; registruje dete-nit za tekuću (pozivajuću) nit.&lt;br /&gt;
&amp;lt;code&amp;gt;thread_join_all&amp;lt;/code&amp;gt; blokira tekuću nit dok se sva njena deca ne izvrše.&lt;br /&gt;
U okviru C++ API dodati nestatičke metode &amp;lt;code&amp;gt;addChild(Thread* child)&amp;lt;/code&amp;gt; i &amp;lt;code&amp;gt;joinAll()&amp;lt;/code&amp;gt; u klasu &amp;lt;code&amp;gt;Thread&amp;lt;/code&amp;gt;.&lt;br /&gt;
Napisati test program: nit A pravi 3×B i 1×C, svaki B pravi 3×C. Roditelj čeka svu svoju decu pre nego što nastavi.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&lt;br /&gt;
==== TCB.hpp ====&lt;br /&gt;
Dodato na vrhu fajla (forward declaration):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
class Semaphore;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nova polja u &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; sekciji:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
TCB* parent;            // pokazivač na roditelja (nullptr ako nema)&lt;br /&gt;
int childCount;         // broj nezavršene dece&lt;br /&gt;
Semaphore* childrenSem; // semafor na koji roditelj čeka u joinAll&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nove metode u &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; sekciji:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
static void addChild(TCB* parent, TCB* child);&lt;br /&gt;
static void joinAllChildren();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TCB.cpp ====&lt;br /&gt;
Dodat include na vrhu:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;../h/Semaphore.hpp&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
U konstruktoru, inicijalizacija novih polja (posle &amp;lt;code&amp;gt;this-&amp;gt;finished = false;&amp;lt;/code&amp;gt;):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
this-&amp;gt;parent = nullptr;&lt;br /&gt;
this-&amp;gt;childCount = 0;&lt;br /&gt;
this-&amp;gt;childrenSem = nullptr;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Izmenjen &amp;lt;code&amp;gt;dispatch()&amp;lt;/code&amp;gt; — else grana proširena da obavesti roditelja kad dete završi:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void TCB::dispatch() {&lt;br /&gt;
    TCB *old = running;&lt;br /&gt;
    if (!old-&amp;gt;isFinished()) {&lt;br /&gt;
        Scheduler::put(old);&lt;br /&gt;
    } else {&lt;br /&gt;
        if (old-&amp;gt;parent != nullptr) {&lt;br /&gt;
            old-&amp;gt;parent-&amp;gt;childCount--;&lt;br /&gt;
            if (old-&amp;gt;parent-&amp;gt;childCount == 0 &amp;amp;&amp;amp; old-&amp;gt;parent-&amp;gt;childrenSem != nullptr) {&lt;br /&gt;
                old-&amp;gt;parent-&amp;gt;childrenSem-&amp;gt;sem_signal();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    running = Scheduler::get();&lt;br /&gt;
    contextSwitch(&amp;amp;old-&amp;gt;context, &amp;amp;running-&amp;gt;context);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nove funkcije:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void TCB::addChild(TCB* parent, TCB* child) {&lt;br /&gt;
    child-&amp;gt;parent = parent;&lt;br /&gt;
    parent-&amp;gt;childCount++;&lt;br /&gt;
    if (parent-&amp;gt;childrenSem == nullptr) {&lt;br /&gt;
        Semaphore::createSemaphore(&amp;amp;parent-&amp;gt;childrenSem, 0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void TCB::joinAllChildren() {&lt;br /&gt;
    if (running-&amp;gt;childCount &amp;lt;= 0) return;&lt;br /&gt;
    running-&amp;gt;childrenSem-&amp;gt;sem_wait();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== syscall_c.hpp ====&lt;br /&gt;
Dodate deklaracije:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void thread_add_child(thread_t child);&lt;br /&gt;
void thread_join_all();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== syscall_c.cpp ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void thread_add_child(thread_t child) {&lt;br /&gt;
    if (child == nullptr) return;&lt;br /&gt;
    do_syscall(0x16, (uint64)child);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void thread_join_all() {&lt;br /&gt;
    do_syscall(0x17);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== RISCV.cpp (handleSupervisorTrap) ====&lt;br /&gt;
Dodate nove case grane u switch (posle case 0x13 dispatch):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
case 0x16: {&lt;br /&gt;
    TCB *child = (TCB*)arg1;&lt;br /&gt;
    TCB::addChild(TCB::running, child);&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
case 0x17: {&lt;br /&gt;
    TCB::joinAllChildren();&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== syscall_cpp.hpp ====&lt;br /&gt;
Dodate metode u klasu &amp;lt;code&amp;gt;Thread&amp;lt;/code&amp;gt; (public sekcija):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void addChild(Thread* child);&lt;br /&gt;
void joinAll();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== syscall_cpp.cpp ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void Thread::addChild(Thread* child) {&lt;br /&gt;
    thread_add_child(child-&amp;gt;getMyHandle());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Thread::joinAll() {&lt;br /&gt;
    thread_join_all();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test primer ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;../h/syscall_cpp.hpp&amp;quot;&lt;br /&gt;
#include &amp;quot;../h/syscall_c.hpp&amp;quot;&lt;br /&gt;
#include &amp;quot;../h/printing.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
class ThreadC : public Thread {&lt;br /&gt;
public:&lt;br /&gt;
    ThreadC(int id) : Thread(), id(id) {}&lt;br /&gt;
private:&lt;br /&gt;
    int id;&lt;br /&gt;
    void run() override {&lt;br /&gt;
        printString(&amp;quot;    C&amp;quot;);&lt;br /&gt;
        printInt(id);&lt;br /&gt;
        printString(&amp;quot; started\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        volatile int sum = 0;&lt;br /&gt;
        for (int i = 0; i &amp;lt; 3000; i++)&lt;br /&gt;
            for (int j = 0; j &amp;lt; 3000; j++)&lt;br /&gt;
                sum += j;&lt;br /&gt;
&lt;br /&gt;
        printString(&amp;quot;    C&amp;quot;);&lt;br /&gt;
        printInt(id);&lt;br /&gt;
        printString(&amp;quot; finished\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class ThreadB : public Thread {&lt;br /&gt;
public:&lt;br /&gt;
    ThreadB(int id) : Thread(), id(id) {}&lt;br /&gt;
private:&lt;br /&gt;
    int id;&lt;br /&gt;
    void run() override {&lt;br /&gt;
        printString(&amp;quot;  B&amp;quot;);&lt;br /&gt;
        printInt(id);&lt;br /&gt;
        printString(&amp;quot; started, creating 3 C children\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        ThreadC* c[3];&lt;br /&gt;
        for (int i = 0; i &amp;lt; 3; i++) {&lt;br /&gt;
            c[i] = new ThreadC(id * 10 + i);&lt;br /&gt;
            c[i]-&amp;gt;start();&lt;br /&gt;
            this-&amp;gt;addChild(c[i]);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        printString(&amp;quot;  B&amp;quot;);&lt;br /&gt;
        printInt(id);&lt;br /&gt;
        printString(&amp;quot; waiting for children...\n&amp;quot;);&lt;br /&gt;
        this-&amp;gt;joinAll();&lt;br /&gt;
&lt;br /&gt;
        printString(&amp;quot;  B&amp;quot;);&lt;br /&gt;
        printInt(id);&lt;br /&gt;
        printString(&amp;quot; all children done!\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        for (int i = 0; i &amp;lt; 3; i++) delete c[i];&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void joinAllTest() {&lt;br /&gt;
    printString(&amp;quot;A started, creating 3 B and 1 C\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    ThreadB* b[3];&lt;br /&gt;
    for (int i = 0; i &amp;lt; 3; i++) {&lt;br /&gt;
        b[i] = new ThreadB(i);&lt;br /&gt;
        b[i]-&amp;gt;start();&lt;br /&gt;
        thread_add_child(b[i]-&amp;gt;getMyHandle());&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    ThreadC* c = new ThreadC(99);&lt;br /&gt;
    c-&amp;gt;start();&lt;br /&gt;
    thread_add_child(c-&amp;gt;getMyHandle());&lt;br /&gt;
&lt;br /&gt;
    printString(&amp;quot;A waiting for all children...\n&amp;quot;);&lt;br /&gt;
    thread_join_all();&lt;br /&gt;
&lt;br /&gt;
    printString(&amp;quot;\n=== A: ALL children done! ===\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    for (int i = 0; i &amp;lt; 3; i++) delete b[i];&lt;br /&gt;
    delete c;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Napomena:&#039;&#039;&#039; &amp;lt;code&amp;gt;start()&amp;lt;/code&amp;gt; mora biti pozvan PRE &amp;lt;code&amp;gt;addChild()&amp;lt;/code&amp;gt; jer &amp;lt;code&amp;gt;start()&amp;lt;/code&amp;gt; interno poziva &amp;lt;code&amp;gt;thread_create()&amp;lt;/code&amp;gt; koji postavlja &amp;lt;code&amp;gt;myHandle&amp;lt;/code&amp;gt;. Bez toga, &amp;lt;code&amp;gt;getMyHandle()&amp;lt;/code&amp;gt; vraća &amp;lt;code&amp;gt;nullptr&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Očekivan output ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A started, creating 3 B and 1 C&lt;br /&gt;
A waiting for all children...&lt;br /&gt;
  B0 started, creating 3 C children&lt;br /&gt;
  B0 waiting for children...&lt;br /&gt;
  B1 started, creating 3 C children&lt;br /&gt;
  B1 waiting for children...&lt;br /&gt;
  B2 started, creating 3 C children&lt;br /&gt;
  B2 waiting for children...&lt;br /&gt;
    C99 started&lt;br /&gt;
    C99 finished&lt;br /&gt;
    C0 started&lt;br /&gt;
    C0 finished&lt;br /&gt;
    C1 started&lt;br /&gt;
    C1 finished&lt;br /&gt;
    ...svi C završe...&lt;br /&gt;
  B0 all children done!&lt;br /&gt;
  B1 all children done!&lt;br /&gt;
  B2 all children done!&lt;br /&gt;
&lt;br /&gt;
=== A: ALL children done! ===&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Kako radi ====&lt;br /&gt;
Svaki TCB ima polje &amp;lt;code&amp;gt;parent&amp;lt;/code&amp;gt; (ko je roditelj) i &amp;lt;code&amp;gt;childCount&amp;lt;/code&amp;gt; (koliko dece još radi). Roditelj se blokira na semaforu (&amp;lt;code&amp;gt;childrenSem&amp;lt;/code&amp;gt;, inicijalno 0). Kad nit završi, u &amp;lt;code&amp;gt;dispatch()&amp;lt;/code&amp;gt; se dekrementira &amp;lt;code&amp;gt;parent-&amp;gt;childCount&amp;lt;/code&amp;gt;. Tek kad poslednje dete spusti brojač na 0, poziva se &amp;lt;code&amp;gt;sem_signal()&amp;lt;/code&amp;gt; koji deblokirara roditelja.&lt;/div&gt;</summary>
		<author><name>Bambula</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%92%D0%B5%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D0%BD%D0%BE%D1%9B%D0%B0_%D0%B8_%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0/%D0%A2%D0%B5%D0%BE%D1%80%D0%B8%D1%98%D0%B0&amp;diff=8322</id>
		<title>Вероватноћа и статистика/Теорија</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%92%D0%B5%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D0%BD%D0%BE%D1%9B%D0%B0_%D0%B8_%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0/%D0%A2%D0%B5%D0%BE%D1%80%D0%B8%D1%98%D0%B0&amp;diff=8322"/>
		<updated>2026-03-10T11:58:10Z</updated>

		<summary type="html">&lt;p&gt;Bambula: /* Расподеле */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
&#039;&#039;&#039;Теорија&#039;&#039;&#039; са предавања може, поред задатака, доћи на колоквијумима. Испод је излистана сажета теорија, без додатних примера, ради вежбања за колоквијум.&lt;br /&gt;
&lt;br /&gt;
== Увод ==&lt;br /&gt;
=== Основни појмови ===&lt;br /&gt;
* &#039;&#039;&#039;Статистички експеримент:&#039;&#039;&#039;&lt;br /&gt;
** може да се понови више пута под истим условима&lt;br /&gt;
** познати су нам сви могући исходи (нотација: &amp;lt;math&amp;gt;\omega&amp;lt;/math&amp;gt;)&lt;br /&gt;
** не знамо унапред шта ће се десити у конкретном експерименту&lt;br /&gt;
** Скуп свих исхода (нотација: &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt;) може бити коначан (бацање новчића), бесконачан, а уколико је бесконачан може бити пребројив (бацање коцке док не падне 6) и непребројив (бирање реалног броја из интервала)&lt;br /&gt;
* &#039;&#039;&#039;Догађај:&#039;&#039;&#039; подскуп &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt; (нотација: &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt;, ...) &lt;br /&gt;
** Догађај се реализује у експерименту ако се оствари у једном од исхода који су његови елементи.&lt;br /&gt;
** Операције над догађајима:&lt;br /&gt;
*** &amp;lt;math&amp;gt;A \cup B&amp;lt;/math&amp;gt;: A или B&lt;br /&gt;
*** &amp;lt;math&amp;gt;A \cdot B&amp;lt;/math&amp;gt;: A и B (нотација за пресек се не користи)&lt;br /&gt;
*** &amp;lt;math&amp;gt;A \setminus B&amp;lt;/math&amp;gt;: A, али не B&lt;br /&gt;
*** &amp;lt;math&amp;gt;A&#039;&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\overline{A}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;A^C&amp;lt;/math&amp;gt;: супротан догађај (&amp;lt;math&amp;gt;\Omega \setminus A&amp;lt;/math&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== Вероватноћа ===&lt;br /&gt;
* &#039;&#039;&#039;Аксиоме вероватноће:&#039;&#039;&#039; Вероватноћа је функција &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; дефинисана над подскуповима неког скупа &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt; ако важи:&lt;br /&gt;
*# &amp;lt;math&amp;gt;P(\Omega) = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
*# &amp;lt;math&amp;gt;\forall A \subset \Omega, P(A) \in [0, 1]&amp;lt;/math&amp;gt;&lt;br /&gt;
*# &amp;lt;math&amp;gt;P(A_1 \cup A_2 \cup ...) = P(A_1) + P(A_2) + ...&amp;lt;/math&amp;gt;, где су &amp;lt;math&amp;gt;A_1, A_2, ... \subset \Omega&amp;lt;/math&amp;gt; који су међусобно искључиви и којих има коначно или пребројиво бесконачно&lt;br /&gt;
* &#039;&#039;&#039;Статистичко одређивање вероватноће:&#039;&#039;&#039; изводимо експеримент &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; пута и региструјемо догађај &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, тако да нам је &amp;lt;math&amp;gt;m(n)&amp;lt;/math&amp;gt; број реализација догађаја &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;:&lt;br /&gt;
** релативна фреквенција догађаја: &amp;lt;math&amp;gt;\frac{m(n)}{n}&amp;lt;/math&amp;gt;&lt;br /&gt;
** &amp;lt;math&amp;gt;P(A) = \lim_{n \to \infty} \frac{m(n)}{n}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Модел једнаковероватности исхода:&#039;&#039;&#039; ако су сви исходи из скупа &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt; једнаковероватни а број чланова је &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, онда се вероватноћа догађаја &amp;lt;math&amp;gt;A \subset \Omega&amp;lt;/math&amp;gt; може одредити као количник броја повољних и свих исхода: &amp;lt;math&amp;gt;P(A) = \frac{|A|}{|\Omega|}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Геометријска вероватноћа:&#039;&#039;&#039; за непребројив скуп &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt; који може да се представи геометријски као ограничени објекат (интервал праве, лик у равни, тело у простору) и догађај &amp;lt;math&amp;gt;A \subset \Omega&amp;lt;/math&amp;gt; важи &amp;lt;math&amp;gt;P(A) = \frac{m(A)}{m(\Omega)}&amp;lt;/math&amp;gt; где је &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; мера тог објекта (дужина, површина, запремина).&lt;br /&gt;
** Услов: једнаковероватни догађаји су представљени скуповима исте мере и обрнуто&lt;br /&gt;
&lt;br /&gt;
=== Особине вероватноће ===&lt;br /&gt;
* &#039;&#039;&#039;Теорема 1.1:&#039;&#039;&#039; &amp;lt;math&amp;gt;P(A&#039;) = 1 - P(A)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Доказ: како су &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;A&#039;&amp;lt;/math&amp;gt; међусобно искључиви, важи &amp;lt;math&amp;gt;A \cup A&#039; = \Omega&amp;lt;/math&amp;gt;, па из &amp;lt;math&amp;gt;P(A \cup A&#039;) = P(\Omega)&amp;lt;/math&amp;gt; и трећег аксиома вероватноће добијамо &amp;lt;math&amp;gt;P(A) + P(A&#039;) = 1&amp;lt;/math&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;Теорема 1.2:&#039;&#039;&#039; &amp;lt;math&amp;gt;P(\emptyset) = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
** Доказ: из &amp;lt;math&amp;gt;\Omega&#039; = \emptyset&amp;lt;/math&amp;gt; и теореме 1.1 следи да је &amp;lt;math&amp;gt;P(\emptyset) = 1 - P(\Omega) = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Теорема 1.3:&#039;&#039;&#039; &amp;lt;math&amp;gt;P(A \setminus B) = P(A) - P(AB)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Доказ:&lt;br /&gt;
*** Ако су A и B међусобно искључиви, важи да је &amp;lt;math&amp;gt;A \setminus B = A&amp;lt;/math&amp;gt;, па важи да је &amp;lt;math&amp;gt;P(A \setminus B) = P(A) = P(A) - P(\emptyset) = P(A) - P(AB)&amp;lt;/math&amp;gt;&lt;br /&gt;
*** Ако нису, важи да је &amp;lt;math&amp;gt;A = (A \setminus B) \cup AB&amp;lt;/math&amp;gt;, па из трећег аксиома добијамо &amp;lt;math&amp;gt;P(A) = P(A \setminus B) + P(AB) \implies P(A \setminus B) = P(A) - P(AB)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Теорема 1.4:&#039;&#039;&#039; &amp;lt;math&amp;gt;A \subset B \implies P(A) \leq P(B)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Доказ: &amp;lt;math&amp;gt;P(B) = P(A) + P(B \setminus A)&amp;lt;/math&amp;gt;, а пошто по другој аксиоми &amp;lt;math&amp;gt;P(B \setminus A)&amp;lt;/math&amp;gt; онда следи &amp;lt;math&amp;gt;P(B) \geq P(A)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Теорема 1.5:&#039;&#039;&#039; &amp;lt;math&amp;gt;P(A \cup B) = P(A) + P(B) - P(AB)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Доказ:&lt;br /&gt;
*** Ако су међусобно искључиви, &amp;lt;math&amp;gt;P(AB) = 0&amp;lt;/math&amp;gt; тако да доказ следи по трећој аксиоми&lt;br /&gt;
*** Ако нису, &amp;lt;math&amp;gt;P(A \cup B) = P(A \setminus B) + P(B) = P(A) - P(AB) + P(B)&amp;lt;/math&amp;gt; по трећој аксиоми и теореми 1.3&lt;br /&gt;
** Такође важи и &amp;lt;math&amp;gt;P(A \cup B \cup C) = P(A) + P(B) + P(C) - P(AB) - P(AC) - P(BC) + P(ABC)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Условна вероватноћа и независност догађаја ==&lt;br /&gt;
=== Условна вероватноћа ===&lt;br /&gt;
* &#039;&#039;&#039;Условна вероватноћа&#039;&#039;&#039; догађаја A под условом да се реализовао догађај B: &amp;lt;math&amp;gt;P(A|B) = \frac{P(AB)}{P(B)}&amp;lt;/math&amp;gt; за &amp;lt;math&amp;gt;P(B) \neq 0&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Теорема 2.1:&#039;&#039;&#039; Нека је &amp;lt;math&amp;gt;H \subset \Omega&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;P(H) &amp;gt; 0&amp;lt;/math&amp;gt;. Функција &amp;lt;math&amp;gt;P(...|H)&amp;lt;/math&amp;gt; је вероватноћа.&lt;br /&gt;
** Доказ:&lt;br /&gt;
**# &amp;lt;math&amp;gt;P(\Omega|H) = \frac{P(\Omega H)}{P(H)} = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
**# За &amp;lt;math&amp;gt;A \subset \Omega&amp;lt;/math&amp;gt; важи &amp;lt;math&amp;gt;P(A|H) = \frac{P(AH)}{P(H)}&amp;lt;/math&amp;gt;. Пошто је &amp;lt;math&amp;gt;P(AH) \geq 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;P(H) &amp;gt; 0&amp;lt;/math&amp;gt;, важи да је &amp;lt;math&amp;gt;P(A|H) \geq 0&amp;lt;/math&amp;gt;. Пошто је &amp;lt;math&amp;gt;AH \subset H&amp;lt;/math&amp;gt;, из теореме 1.4 следи да је &amp;lt;math&amp;gt;P(AH) \leq P(H)&amp;lt;/math&amp;gt;, односно &amp;lt;math&amp;gt;\frac{P(AH)}{P(H)} \leq 1&amp;lt;/math&amp;gt;&lt;br /&gt;
**# Ако су &amp;lt;math&amp;gt;A_1, A_2, ... \subset \Omega&amp;lt;/math&amp;gt; међусобно искључиви догађаји којих има коначно или пребројиво много, добијамо &amp;lt;math&amp;gt;L = P(A_1 \cup A_2 \cup ...|A) = \frac{P((A_1 \cup A_2 \cup ...) \cdot H)}{P(H)} = \frac{P(A_1 H \cup A_2 H \cup ...)}{P(H)}&amp;lt;/math&amp;gt;. Пошто су скупови &amp;lt;math&amp;gt;A_1 H, A_2 H, ...&amp;lt;/math&amp;gt; међусобно искључиви, на основу треће аксиоме следи &amp;lt;math&amp;gt;L = \frac{P(A_1 H) + P(A_2 H) + ...}{P(H)} = P(A_1|H) + P(A_2|H) + ...&amp;lt;/math&amp;gt;&lt;br /&gt;
*** Како су доказане све три аксиоме вероватноће, доказано је и да је условна вероватноћа, такође, вероватноћа.&lt;br /&gt;
&lt;br /&gt;
=== Независност догађаја ===&lt;br /&gt;
* &#039;&#039;&#039;Независност догађаја:&#039;&#039;&#039; Догађаји A и B су статистички независни ако важи &amp;lt;math&amp;gt;P(AB) = P(A) P(B)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;Независност по паровима:&#039;&#039;&#039; Ако су свака два од &amp;lt;math&amp;gt;A_1, A_2, ..., A_n \subset \Omega&amp;lt;/math&amp;gt; (за &amp;lt;math&amp;gt;n &amp;gt; 2&amp;lt;/math&amp;gt;) независна, онда су ти догађаји независни по паровима.&lt;br /&gt;
* &#039;&#039;&#039;Независност више догађаја у целини:&#039;&#039;&#039; Ако за сваки подскуп &amp;lt;math&amp;gt;A_{i_1}, A_{i_2}, ... A_{i_k}&amp;lt;/math&amp;gt; скупа догађаја &amp;lt;math&amp;gt;A_1, A_2, ..., A_n \subset \Omega&amp;lt;/math&amp;gt;, где је &amp;lt;math&amp;gt;2 \leq k &amp;lt; n&amp;lt;/math&amp;gt; важи &amp;lt;math&amp;gt;P(A_{i_1} \cdot A_{i_2} \cdot ... \cdot A_{i_k}) = P(A_{i_1}) \cdot ... \cdot P(A_{i_k})&amp;lt;/math&amp;gt;, онда су догађаји из тог скупа међусобно независни.&lt;br /&gt;
* &#039;&#039;&#039;Теорема 2.2:&#039;&#039;&#039; Ако су догађаји &amp;lt;math&amp;gt;A_1, A_2, ..., A_n \subset \Omega&amp;lt;/math&amp;gt; независни и ако је догађај &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; добијен од догађаја &amp;lt;math&amp;gt;A_1, A_2, ..., A_k&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;k &amp;lt; n&amp;lt;/math&amp;gt;) применом коначно много скуповних операција, онда су и догађаји &amp;lt;math&amp;gt;B, A_{n+1}, ..., A_n&amp;lt;/math&amp;gt; такође независни.&lt;br /&gt;
** Доказ: није доказивано.&lt;br /&gt;
* &#039;&#039;&#039;Теорема 2.3:&#039;&#039;&#039; За догађаје &amp;lt;math&amp;gt;A_1, A_2, ..., A_n \subset \Omega&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;n \geq 2&amp;lt;/math&amp;gt;) важи: &amp;lt;math&amp;gt;P(A_1 ... A_n) = P(A_1) P(A_2|A_1) P(A_3|A_1 A_2) ... P(A_n|A_1 A_2 ... A_{n-1})&amp;lt;/math&amp;gt;&lt;br /&gt;
** Доказ: за &amp;lt;math&amp;gt;n = 2&amp;lt;/math&amp;gt; је ово дефиниција условне вероватноће, за остатак се доказује индукцијом.&lt;br /&gt;
* &#039;&#039;&#039;Потпун скуп хипотеза:&#039;&#039;&#039; Ако су догађаји &amp;lt;math&amp;gt;H_1, H_2, ..., H_n&amp;lt;/math&amp;gt; међусобно искључиви и важи &amp;lt;math&amp;gt;H_1 \cup H_2 \cup ... \cup H_n = \Omega&amp;lt;/math&amp;gt; онда они чине потпун скуп хипотеза.&lt;br /&gt;
* &#039;&#039;&#039;Тотална вероватноћа:&#039;&#039;&#039; &amp;lt;math&amp;gt;P(A) = P(H_1) P(A|H_1) + P(H_2) P(A|H_2) + ...&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Бајесова формула:&#039;&#039;&#039; За &amp;lt;math&amp;gt;A \subset \Omega&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;P(A) \neq 0&amp;lt;/math&amp;gt; важи &amp;lt;math&amp;gt;P(H_i|A) = \frac{P(A|H_i) P(H_i)}{P(A)} = \frac{P(A|H_i) P(H_i)}{P(H_1) P(A|H_1) + P(A|H_2) A(H_2) + ... + P(A|H_n) P(H_n)}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Поузданост уређаја:&#039;&#039;&#039; вероватноћа да је уређај исправан, која зависи од поузданости његових компоненти. Две компоненте могу међусобно бити повезане редно или паралелно, и у зависности од тога одређујемо укупну поузданост те две компоненте.&lt;br /&gt;
** &#039;&#039;&#039;Редно:&#039;&#039;&#039; &amp;lt;math&amp;gt;P = P_1 \cdot P_2&amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Паралелно:&#039;&#039;&#039; &amp;lt;math&amp;gt;P = 1 - (1 - P_1)(1 - P_2) = P_1 + P_2 - P_1 P_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Случајне променљиве ==&lt;br /&gt;
* &#039;&#039;&#039;Случајна променљива:&#039;&#039;&#039; пресликавање скупа свих исхода &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt; у скуп реалних бројева.&lt;br /&gt;
** Ознака: &amp;lt;math&amp;gt;X \in \{x_1, x_2, ...\}&amp;lt;/math&amp;gt; где је &amp;lt;math&amp;gt;\{x_1, x_2, ...\}&amp;lt;/math&amp;gt; скуп свих бројева у које се пресликавају исходи.&lt;br /&gt;
** На основу пребројивости скупа &amp;lt;math&amp;gt;\{x_1, x_2, ...\}&amp;lt;/math&amp;gt; случајне променљиве се деле на две категорије:&lt;br /&gt;
*** &#039;&#039;&#039;Дискретне:&#039;&#039;&#039; уколико је овај скуп коначан или пребројив, и&lt;br /&gt;
*** &#039;&#039;&#039;Непрекидне (мешовите):&#039;&#039;&#039; уколико је овај скуп непребројив.&lt;br /&gt;
* &#039;&#039;&#039;Расподела случајне променљиве:&#039;&#039;&#039; функција дефинисана над скуповима реалних бројева, &amp;lt;math&amp;gt;P_X(B) = P(X \in B), B \subset \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Закон расподеле вероватноће случајне променљиве:&#039;&#039;&#039; за неку случајну променљиву &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, чији је скуп вредности &amp;lt;math&amp;gt;\{x_1, x_2, ...\}&amp;lt;/math&amp;gt;, то је скуп вероватноћа &amp;lt;math&amp;gt;\{p_1, p_2, ...\}&amp;lt;/math&amp;gt; где је &amp;lt;math&amp;gt;p_i = P(X = x_i)&amp;lt;/math&amp;gt; за све &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt;&lt;br /&gt;
** Ознака: &amp;lt;math&amp;gt;X: \begin{pmatrix}&lt;br /&gt;
  x_1 &amp;amp; x_2 &amp;amp; ... \\&lt;br /&gt;
  p_1 &amp;amp; p_2 &amp;amp; ...&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;, тако да &amp;lt;math&amp;gt;\sum p_i = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Непрекидне случајне променљиве ===&lt;br /&gt;
* &#039;&#039;&#039;Функција расподеле:&#039;&#039;&#039; &amp;lt;math&amp;gt;F(x) = P(X \leq x)&amp;lt;/math&amp;gt;, за &amp;lt;math&amp;gt;x \in \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
* Особине функције расподеле:&lt;br /&gt;
*# &amp;lt;math&amp;gt;(\forall x \in \mathbb{R}) F(x) \in [0, 1]&amp;lt;/math&amp;gt;&lt;br /&gt;
*# &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; је монотоно неопадајућа функција&lt;br /&gt;
*# &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; је непрекидна са десне стране за свако &amp;lt;math&amp;gt;x \in \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
*# &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; има граничну вредност са леве стране у свакој тачки &amp;lt;math&amp;gt;x \in \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
*# &amp;lt;math&amp;gt;\lim_{x \to -\infty} F(x) = 0, \lim_{x \to +\infty} F(x) = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Функција густине расподеле:&#039;&#039;&#039; ако је &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; ненегативна функција дефинисана на &amp;lt;math&amp;gt;\mathbb{R}&amp;lt;/math&amp;gt; и важи &amp;lt;math&amp;gt;(\forall x \in \mathbb{R}) F(x) = \int_{-\infty}^x f(t) dt&amp;lt;/math&amp;gt;, онда је &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; непрекидна случајна променљива а &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; њена функција густине расподеле.&lt;br /&gt;
** &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; је непрекидна &amp;lt;math&amp;gt;\implies F(x)&amp;lt;/math&amp;gt; је непрекидна&lt;br /&gt;
** Ако &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; има коначно или пребројиво много тачака прекида, у њима се &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; може дефинисати произвољно.&lt;br /&gt;
* &#039;&#039;&#039;Теорема 3.1:&#039;&#039;&#039; За непрекидну случајну променљиву &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; важи:&lt;br /&gt;
*# &amp;lt;math&amp;gt;(\forall a \in \mathbb{R}) P(X = a) = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
*#* Доказ: &amp;lt;math&amp;gt;P(X = a) = F(a) - F(a^{-}) = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
*# &amp;lt;math&amp;gt;(\forall a, b \in \mathbb{R}, a &amp;lt; b) P(X \in (a, b)) = \int_a^b f(t) dt = P(X \in [a, b)) = P(X \in (a, b]) = P(X \in [a, b])&amp;lt;/math&amp;gt;&lt;br /&gt;
*#* Доказ: ако интеграл представимо површином испод функције, није нам битно да ли избацимо нула, једну или две дужи из те површине.&lt;br /&gt;
*# &amp;lt;math&amp;gt;P(x &amp;lt; a) = P(x \leq a)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;P(x &amp;gt; a) = P(x \geq a)&amp;lt;/math&amp;gt;&lt;br /&gt;
*# &amp;lt;math&amp;gt;\int_{-\infty}^{+\infty} f(x) dx = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Теорема 3.2:&#039;&#039;&#039; ако је &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; дефинисана на &amp;lt;math&amp;gt;\mathbb{R}&amp;lt;/math&amp;gt;, непрекидна са десне стране и ако је &amp;lt;math&amp;gt;\lim_{x \to +\infty} F(x) = 1&amp;lt;/math&amp;gt; а &amp;lt;math&amp;gt;\lim_{x \to -\infty} F(x) = 0&amp;lt;/math&amp;gt;, тада постоји случајна променљива којој је &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; функција расподеле.&lt;br /&gt;
&lt;br /&gt;
=== Расподеле ===&lt;br /&gt;
# &#039;&#039;&#039;Бернулијева:&#039;&#039;&#039; &amp;lt;math&amp;gt;X \sim Bern(p)&amp;lt;/math&amp;gt; (Бернулијева расподела са вероватноћом успеха &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;)&lt;br /&gt;
#* Закон: &amp;lt;math&amp;gt;X: \begin{pmatrix}&lt;br /&gt;
  0     &amp;amp; 1 \\&lt;br /&gt;
  1 - p &amp;amp; p&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
#* Модел: индикатор догађаја, &amp;lt;math&amp;gt;I_A = \left\{ \begin{matrix}&lt;br /&gt;
  1, &amp;amp; \text{sa ver.} p = P(A) \\&lt;br /&gt;
  0, &amp;amp; \text{sa ver.} q = 1-p = P(\overline{A})&lt;br /&gt;
\end{matrix}\right.&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Биномна:&#039;&#039;&#039; &amp;lt;math&amp;gt;X \sim Bin(n, p), n \in \mathbb{N}, 0 &amp;lt; p &amp;lt; 1, X \in \{0, 1, ..., n\}&amp;lt;/math&amp;gt;&lt;br /&gt;
#* Закон: &amp;lt;math&amp;gt;P(X = k) = \binom{n}{k} p^k q^{n-k}, q = 1 - p&amp;lt;/math&amp;gt;&lt;br /&gt;
#* Модел: Бернулијева шема је низ Бернулијевих (независних) експеримената, и у сваком експерименту догађај &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; има вероватноћу &amp;lt;math&amp;gt;P(A) = p&amp;lt;/math&amp;gt;, а наша случајна променљива јесте број реализација догађаја &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; у &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; изведених експеримената.&lt;br /&gt;
# &#039;&#039;&#039;Пуасонова:&#039;&#039;&#039; &amp;lt;math&amp;gt;X \sim Poiss(\lambda), \lambda &amp;gt; 0&amp;lt;/math&amp;gt;&lt;br /&gt;
#* Закон: &amp;lt;math&amp;gt;P(X = k) = e^{-\lambda}\frac{\lambda^k}{k!}&amp;lt;/math&amp;gt;&lt;br /&gt;
#* Модел: број ретких догађаја у јединици времена, тако да је &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt; просечан број догађаја&lt;br /&gt;
# &#039;&#039;&#039;Геометријска:&#039;&#039;&#039; &amp;lt;math&amp;gt;X \sim G(p), X \in \mathbb{N}&amp;lt;/math&amp;gt;&lt;br /&gt;
#* Закон: &amp;lt;math&amp;gt;P(X = n) = q^{n-1} p&amp;lt;/math&amp;gt;&lt;br /&gt;
#* Модел: изводе се Бернулијеви експерименти до првог успеха, а наша случајна променљива је број неуспеха&lt;br /&gt;
# &#039;&#039;&#039;Паскалова (обрнута биномна):&#039;&#039;&#039;&lt;br /&gt;
#* Закон: &amp;lt;math&amp;gt;P(X = n) = \binom{n-1}{k-1} p^k q^{n-k}&amp;lt;/math&amp;gt;&lt;br /&gt;
#* Модел: број Бернулијевих експеримената до &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-тог успеха.&lt;br /&gt;
# &#039;&#039;&#039;Хипергеометријска:&#039;&#039;&#039;&lt;br /&gt;
#* Модел: на располагању је &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; предмета од којих је &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; једне а &amp;lt;math&amp;gt;n-m&amp;lt;/math&amp;gt; друге врсте, од њих бирамо &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; предмета (&amp;lt;math&amp;gt;k &amp;lt; m, k &amp;lt; n-m&amp;lt;/math&amp;gt;) и случајна променљива нам је број предмета прве врсте међу изабраним&lt;br /&gt;
#* Закон: &amp;lt;math&amp;gt;P(X = r) = \frac{\binom{m}{r}\binom{n-m}{k-r}}{\binom{n}{k}}&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;(Дискретна) униформна:&#039;&#039;&#039;&lt;br /&gt;
#* Закон: &amp;lt;math&amp;gt;P(X = x_i) = \frac{1}{n}&amp;lt;/math&amp;gt;, за &amp;lt;math&amp;gt;X = \{x_1, x_2, ..., x_n\}&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;(Непрекидна) униформна:&#039;&#039;&#039; &amp;lt;math&amp;gt;X \sim Unif[a, b], a, b \in \mathbb{R}, a &amp;lt; b&amp;lt;/math&amp;gt;&lt;br /&gt;
#* Закон: &amp;lt;math&amp;gt;f(x) = \left\{\begin{matrix}&lt;br /&gt;
  \frac{1}{b - a}, &amp;amp; x \in [a, b] \\&lt;br /&gt;
  0  &amp;amp; x \notin [a, b]&lt;br /&gt;
\end{matrix}\right.&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; је концентрисана на &amp;lt;math&amp;gt;[a, b]&amp;lt;/math&amp;gt;)&lt;br /&gt;
#** &amp;lt;math&amp;gt;F(x) = \left\{\begin{matrix}&lt;br /&gt;
  0, &amp;amp; x &amp;lt; a \\&lt;br /&gt;
  \frac{x - a}{b - a}, &amp;amp; a \leq x \leq b \\&lt;br /&gt;
  1, &amp;amp; x &amp;gt; b&lt;br /&gt;
\end{matrix}\right.&amp;lt;/math&amp;gt;&lt;br /&gt;
#* Модел: бирамо број из &amp;lt;math&amp;gt;[a, b]&amp;lt;/math&amp;gt;, а случајна променљива нам је да ли је број у &amp;lt;math&amp;gt;[a, x]&amp;lt;/math&amp;gt; (где је &amp;lt;math&amp;gt;a &amp;lt; x &amp;lt; b&amp;lt;/math&amp;gt;)&lt;br /&gt;
# &#039;&#039;&#039;Експоненцијална:&#039;&#039;&#039; &amp;lt;math&amp;gt;X \sim Exp(\lambda), \lambda &amp;gt; 0&amp;lt;/math&amp;gt;&lt;br /&gt;
#* Модел: време између Пуасонових догађаја, где је &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt; реципрочно просечно време&lt;br /&gt;
#* Закон: &amp;lt;math&amp;gt;f(x) = \left\{\begin{matrix}&lt;br /&gt;
  \lambda e^{-\lambda x}, &amp;amp; x \geq 0 \\&lt;br /&gt;
  0, &amp;amp; x &amp;lt; 0&lt;br /&gt;
\end{matrix}\right.&amp;lt;/math&amp;gt;&lt;br /&gt;
#** &amp;lt;math&amp;gt;F(x) = \left\{\begin{matrix}&lt;br /&gt;
  0, &amp;amp; x &amp;lt; 0 \\&lt;br /&gt;
  1 - e^{-\lambda x}, &amp;amp; x \geq 0&lt;br /&gt;
\end{matrix}\right.&amp;lt;/math&amp;gt;&lt;br /&gt;
#* Особина одсуства меморије: &amp;lt;math&amp;gt;P(X &amp;gt; s + t | X &amp;gt; s) = P(X &amp;gt; t), s, t &amp;gt; 0&amp;lt;/math&amp;gt; &lt;br /&gt;
# &#039;&#039;&#039;Стандардна нормална (стандардна Гаусова):&#039;&#039;&#039; &amp;lt;math&amp;gt;Z \sim \mathcal{N}(0, 1)&amp;lt;/math&amp;gt;&lt;br /&gt;
#* Закон: &amp;lt;math&amp;gt;f(x) = \frac{1}{\sqrt{2\pi}} e^{-\frac{x^2}{2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
#** &amp;lt;math&amp;gt;\Phi(x) = \int_{-\infty}^x = \frac{1}{\sqrt{2\pi}} e^{-\frac{x^2}{2}} dx&amp;lt;/math&amp;gt; (&#039;&#039;&#039;неизрачунљиво&#039;&#039;&#039;, али се рачуна на основу таблице, с тим што &amp;lt;math&amp;gt;x \geq 3.5 \implies \Phi(x) \approx 1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x &amp;lt; 0 \implies \Phi(-x) + \Phi(x) = 1&amp;lt;/math&amp;gt;)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Вредности &amp;lt;math&amp;gt;\Phi(x)&amp;lt;/math&amp;gt; (пример: &amp;lt;math&amp;gt;\Phi(1.43) = 0.9236&amp;lt;/math&amp;gt;)&lt;br /&gt;
! X   !! 0      !! 1      !! 2      !! 3      !! 4      !! 5      !! 6      !! 7      !! 8      !! 9&lt;br /&gt;
|-&lt;br /&gt;
| 0.0 || 5000   || 5040   || 5080   || 5120   || 5160   || 5199   || 5239   || 5279   || 5319   || 5359&lt;br /&gt;
|-&lt;br /&gt;
| 0.1 || 5398   || 5438   || 5478   || 5517   || 5557   || 5596   || 5636   || 5675   || 5714   || 5753&lt;br /&gt;
|-&lt;br /&gt;
| 0.2 || 5793   || 5832   || 5871   || 5910   || 5948   || 5987   || 6026   || 6064   || 6103   || 6141&lt;br /&gt;
|-&lt;br /&gt;
| 0.3 || 6179   || 6217   || 6255   || 6293   || 6331   || 6368   || 6406   || 6443   || 6480   || 6517&lt;br /&gt;
|-&lt;br /&gt;
| 0.4 || 6554   || 6591   || 6628   || 6664   || 6700   || 6736   || 6772   || 6808   || 6844   || 6879&lt;br /&gt;
|-&lt;br /&gt;
| 0.5 || 6915   || 6950   || 6985   || 7019   || 7054   || 7088   || 7123   || 7157   || 7190   || 7224&lt;br /&gt;
|-&lt;br /&gt;
| 0.6 || 7257   || 7291   || 7324   || 7357   || 7389   || 7422   || 7454   || 7486   || 7517   || 7549&lt;br /&gt;
|-&lt;br /&gt;
| 0.7 || 7580   || 7611   || 7642   || 7673   || 7704   || 7734   || 7764   || 7794   || 7823   || 7852&lt;br /&gt;
|-&lt;br /&gt;
| 0.8 || 7881   || 7910   || 7939   || 7967   || 7995   || 8023   || 8051   || 8078   || 8106   || 8133&lt;br /&gt;
|-&lt;br /&gt;
| 0.9 || 8159   || 8186   || 8212   || 8238   || 8264   || 8289   || 8315   || 8340   || 8365   || 8389&lt;br /&gt;
|-&lt;br /&gt;
| 1.0 || 8413   || 8438   || 8461   || 8485   || 8508   || 8531   || 8554   || 8577   || 8599   || 8621&lt;br /&gt;
|-&lt;br /&gt;
| 1.1 || 8643   || 8665   || 8686   || 8708   || 8729   || 8749   || 8770   || 8790   || 8810   || 8830&lt;br /&gt;
|-&lt;br /&gt;
| 1.2 || 8849   || 8869   || 8888   || 8907   || 8925   || 8944   || 8962   || 8980   || 8997   || 9015&lt;br /&gt;
|-&lt;br /&gt;
| 1.3 || 9032   || 9049   || 9066   || 9082   || 9099   || 9115   || 9131   || 9147   || 9162   || 9177&lt;br /&gt;
|-&lt;br /&gt;
| 1.4 || 9192   || 9207   || 9222   || 9236   || 9251   || 9265   || 9279   || 9292   || 9306   || 9319&lt;br /&gt;
|-&lt;br /&gt;
| 1.5 || 9332   || 9345   || 9357   || 9370   || 9382   || 9394   || 9406   || 9418   || 9429   || 9441&lt;br /&gt;
|-&lt;br /&gt;
| 1.6 || 9452   || 9463   || 9474   || 9484   || 9495   || 9505   || 9515   || 9525   || 9535   || 9545&lt;br /&gt;
|-&lt;br /&gt;
| 1.7 || 9554   || 9564   || 9573   || 9582   || 9591   || 9599   || 9608   || 9616   || 9625   || 9633&lt;br /&gt;
|-&lt;br /&gt;
| 1.8 || 9641   || 9649   || 9656   || 9664   || 9671   || 9678   || 9686   || 9693   || 9699   || 9706&lt;br /&gt;
|-&lt;br /&gt;
| 1.9 || 9713   || 9719   || 9726   || 9732   || 9738   || 9744   || 9750   || 9756   || 9761   || 9767&lt;br /&gt;
|-&lt;br /&gt;
| 2.0 || 97725  || 97778  || 97831  || 97882  || 97932  || 97982  || 98030  || 98077  || 98124  || 98169&lt;br /&gt;
|-&lt;br /&gt;
| 2.1 || 98214  || 98257  || 98300  || 98341  || 98382  || 98422  || 98461  || 98500  || 98537  || 98574&lt;br /&gt;
|-&lt;br /&gt;
| 2.2 || 98610  || 98645  || 98679  || 98713  || 98745  || 98778  || 98809  || 98840  || 98870  || 98899&lt;br /&gt;
|-&lt;br /&gt;
| 2.3 || 98928  || 98956  || 98983  || 99010  || 99036  || 99061  || 99086  || 99111  || 99134  || 99158&lt;br /&gt;
|-&lt;br /&gt;
| 2.4 || 99180  || 99202  || 99224  || 99245  || 99266  || 99286  || 99305  || 99324  || 99343  || 99361&lt;br /&gt;
|-&lt;br /&gt;
| 2.5 || 99379  || 99396  || 99413  || 99430  || 99446  || 99461  || 99477  || 99492  || 99506  || 99520&lt;br /&gt;
|-&lt;br /&gt;
| 2.6 || 99534  || 99547  || 99560  || 99573  || 99585  || 99598  || 99609  || 99621  || 99632  || 99643&lt;br /&gt;
|-&lt;br /&gt;
| 2.7 || 99653  || 99664  || 99674  || 99683  || 99693  || 99702  || 99711  || 99720  || 99728  || 99736&lt;br /&gt;
|-&lt;br /&gt;
| 2.8 || 99744  || 99752  || 99760  || 99767  || 99774  || 99781  || 99788  || 99795  || 99801  || 99807&lt;br /&gt;
|-&lt;br /&gt;
| 2.9 || 99813  || 99819  || 99825  || 99831  || 99836  || 99841  || 99846  || 99851  || 99856  || 99861&lt;br /&gt;
|-&lt;br /&gt;
| 3.0 || 998650 || 998694 || 998736 || 998777 || 998817 || 998856 || 998893 || 998930 || 998965 || 998999&lt;br /&gt;
|-&lt;br /&gt;
| 3.1 || 999032 || 999065 || 999096 || 999126 || 999155 || 999184 || 999211 || 999238 || 999264 || 999289&lt;br /&gt;
|-&lt;br /&gt;
| 3.2 || 999313 || 999336 || 999359 || 999381 || 999402 || 999423 || 999443 || 999462 || 999481 || 999499&lt;br /&gt;
|-&lt;br /&gt;
| 3.3 || 999517 || 999534 || 999550 || 999566 || 999581 || 999596 || 999610 || 999624 || 999638 || 999651&lt;br /&gt;
|-&lt;br /&gt;
| 3.4 || 999663 || 999675 || 999687 || 999698 || 999709 || 999720 || 999730 || 999740 || 999749 || 999758&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Случајни вектори ===&lt;br /&gt;
* &#039;&#039;&#039;Случајни вектор:&#039;&#039;&#039; скуп случајних променљивих дефинисаних на истом скупу исхода&lt;br /&gt;
* &#039;&#039;&#039;Заједнички закон расподеле:&#039;&#039;&#039; одређен је ако су познате све вероватноће &amp;lt;math&amp;gt;p_{ij} = P(X = x_i, Y = y_j)&amp;lt;/math&amp;gt; за све вредности &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;y_j&amp;lt;/math&amp;gt; које случајне променљиве узимају&lt;br /&gt;
* &#039;&#039;&#039;Маргинални закони расподеле:&#039;&#039;&#039; појединачни закони расподеле случајних променљивих у вектору, добијени из заједничког закона као &amp;lt;math&amp;gt;P(X = x_i) = p_{i1} + p_{i2} + ...&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Заједничка функција расподеле:&#039;&#039;&#039; &amp;lt;math&amp;gt;F(x, y) = P(X \leq x, Y \leq y)&amp;lt;/math&amp;gt; за све &amp;lt;math&amp;gt;x, y \in \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Заједничка функција густине:&#039;&#039;&#039; Ако постоји ненегативна функција &amp;lt;math&amp;gt;f(x, y)&amp;lt;/math&amp;gt; дефинисана за &amp;lt;math&amp;gt;X, Y \in \mathbb{R}&amp;lt;/math&amp;gt; таква да &amp;lt;math&amp;gt;(\forall (x, y) \in \mathbb{R}^2) F(x, y) = \int_{-\infty}^x \int_{-\infty}^y f(x, y) dx dy&amp;lt;/math&amp;gt; онда је &amp;lt;math&amp;gt;(X, Y)&amp;lt;/math&amp;gt; непрекидан случајни вектор а &amp;lt;math&amp;gt;f(x, y)&amp;lt;/math&amp;gt; његова заједничка густина. Њене особине су:&lt;br /&gt;
*# &amp;lt;math&amp;gt;\int_{-\infty}^{+\infty} \int_{-\infty}^{+\infty} f(x, y) = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
*# &amp;lt;math&amp;gt;f(x, y) = \frac{\partial^2 F(x, y)}{\partial x \partial y}&amp;lt;/math&amp;gt;&lt;br /&gt;
*# &amp;lt;math&amp;gt;P((X, Y) \in D) = \int_D \int_D f(x, y) dx dy&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Маргиналне функције густине:&#039;&#039;&#039; &amp;lt;math&amp;gt;f_X(x) = \int_{-\infty}^{+\infty} f(x, y) dy&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Независност случајних променљивих ===&lt;br /&gt;
* &amp;lt;math&amp;gt;X_1, X_2, ..., X_n&amp;lt;/math&amp;gt; су независне ако су догађаји &amp;lt;math&amp;gt;X_1 \in A_1, X_2 \in A_2, ...X_n \in A_n&amp;lt;/math&amp;gt; независни за све могуће &amp;lt;math&amp;gt;A_1, A_2, ..., A_n \subset \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Услови независности:&#039;&#039;&#039;&lt;br /&gt;
*# Ако у свакој тачки &amp;lt;math&amp;gt;(x, y) \in \mathbb{R}^2&amp;lt;/math&amp;gt; важи &amp;lt;math&amp;gt;F(x, y) = F_X(x) F_Y(y)&amp;lt;/math&amp;gt; где је &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; заједничка функција расподеле а &amp;lt;math&amp;gt;F_X, F_Y&amp;lt;/math&amp;gt; су маргиналне функције расподеле.&lt;br /&gt;
*# Ако су &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; дискретне и важи &amp;lt;math&amp;gt;P(X = x_i, Y = y_i) = P(X = x_i) P(Y = y_1)&amp;lt;/math&amp;gt; за све вредности &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;y_j&amp;lt;/math&amp;gt;.&lt;br /&gt;
*# Ако су &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; непрекидне и важи &amp;lt;math&amp;gt;(\forall (x, y) \in \mathbb{R}^2) f(x, y) = f_X(x) f_Y(y)&amp;lt;/math&amp;gt; где је &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; заједничка функција густине а &amp;lt;math&amp;gt;f_X, f_Y&amp;lt;/math&amp;gt; су маргиналне функције густине.&lt;br /&gt;
&lt;br /&gt;
=== Варијациони низ ===&lt;br /&gt;
* Ако су &amp;lt;math&amp;gt;X_1, X_2, ... X_n&amp;lt;/math&amp;gt; независне случајне променљиве са истом расподелом које означавају вредности добијене у неким догађајима (на пример, резултати бацања коцкице), онда променљиве &amp;lt;math&amp;gt;X_{(1)}, X_{(2)}, ... X_{(n)}&amp;lt;/math&amp;gt; које носе вредност најмање од ових променљивих, друге најмање од ових променљивих, ... редом чине варијациони низ.&lt;br /&gt;
** Променљиве варијационог низа немају исту расподелу као оригиналне случајне променљиве, и више нису независне.&lt;br /&gt;
* &#039;&#039;&#039;Функција расподеле &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-те случајне променљиве варијационог низа:&#039;&#039;&#039; &amp;lt;math&amp;gt;F_k(x) = \sum_{j = k}^n \binom{n}{j} F(x)^j (1 - F(x))^{n - j}&amp;lt;/math&amp;gt;&lt;br /&gt;
* Специјални случајеви:&lt;br /&gt;
** Функција расподеле најмање случајне променљиве варијационог низа: &amp;lt;math&amp;gt;F_{min}(x) = 1 - (1 - F(x))^n&amp;lt;/math&amp;gt;&lt;br /&gt;
** Функција расподеле највеће случајне променљиве варијационог низа: &amp;lt;math&amp;gt;F_{max}(x) = F(x)^n&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Нумеричке карактеристике случајних променљивих ==&lt;br /&gt;
=== Математичко очекивање ===&lt;br /&gt;
* За дискретну случајну променљиву &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; са коначним скупом вредности &amp;lt;math&amp;gt;\{x_1, x_2, ..., x_n\}&amp;lt;/math&amp;gt;, математичко очекивање је дефинисано са &amp;lt;math&amp;gt;EX = \sum_{k = 1}^n x_k P(X = x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
* За дискретну случајну променљиву &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; са бесконачним скупом вредности, математичко очекивање је дефинисано са &amp;lt;math&amp;gt;EX = \sum_k x_k P(X = x_k)&amp;lt;/math&amp;gt; (под условом да овај ред апсолутно конвергира)&lt;br /&gt;
* За непрекидну случајну променљиву &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; са густином &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, математичко очекивање је дефинисано са &amp;lt;math&amp;gt;EX = \int_{-\infty}^{+\infty} xf(x)dx&amp;lt;/math&amp;gt; (под условом да овај интеграл апсолутно конвергира)&lt;br /&gt;
* &#039;&#039;&#039;Теорема 4.1:&#039;&#039;&#039; Нека је &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; непрекидна случајна променљива са густином &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt; функција за коју постоји &amp;lt;math&amp;gt;E(g(X))&amp;lt;/math&amp;gt;. Тада је: &amp;lt;math&amp;gt;E(g(X)) = \int_{-\infty}^{+\infty} g(x) f(x) dx&amp;lt;/math&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;Теорема 4.2:&#039;&#039;&#039; Нека су &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; случајне променљиве са очекивањима &amp;lt;math&amp;gt;EX&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;EY&amp;lt;/math&amp;gt;, а &amp;lt;math&amp;gt;a, b, c \in \mathbb{R}&amp;lt;/math&amp;gt;. Тада важи:&lt;br /&gt;
*# &amp;lt;math&amp;gt;E(c) = c&amp;lt;/math&amp;gt;&lt;br /&gt;
*# &amp;lt;math&amp;gt;E(aX) = aEX&amp;lt;/math&amp;gt;&lt;br /&gt;
*# &amp;lt;math&amp;gt;E(X + Y) = EX + EY&amp;lt;/math&amp;gt;&lt;br /&gt;
*# Ако су &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; независне, онда је &amp;lt;math&amp;gt;E(XY) = EX EY&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Варијанса ===&lt;br /&gt;
* &#039;&#039;&#039;Варијанса (дисперзија):&#039;&#039;&#039; за променљиву &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; са очекивањем &amp;lt;math&amp;gt;EX&amp;lt;/math&amp;gt;, варијанса је &amp;lt;math&amp;gt;VarX = E(X - EX)^2&amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Стандардна девијација (стандардно одступање):&#039;&#039;&#039; &amp;lt;math&amp;gt;S.D.(X) = \sqrt{VarX}&amp;lt;/math&amp;gt;&lt;br /&gt;
* Особине варијансе за &amp;lt;math&amp;gt;a, c \in \mathbb{R}&amp;lt;/math&amp;gt;:&lt;br /&gt;
*# &amp;lt;math&amp;gt;Var(c) = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
*#* Доказ: &amp;lt;math&amp;gt;Var(c) = E(c - E(c))^2 = E(c - c)^2 = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
*# &amp;lt;math&amp;gt;VarX = 0 \implies P(X = c) = 1&amp;lt;/math&amp;gt; за неко &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;&lt;br /&gt;
*#* Доказ: није доказивано.&lt;br /&gt;
*# &amp;lt;math&amp;gt;VarX = E(X^2) - (EX)^2&amp;lt;/math&amp;gt;&lt;br /&gt;
*#* Доказ: &amp;lt;math&amp;gt;VarX = E(X - EX)^2 =&amp;lt;/math&amp;gt;&amp;lt;math&amp;gt; E(X^2 - 2EX \cdot X + (EX)^2) =&amp;lt;/math&amp;gt;&amp;lt;math&amp;gt;E(X^2) + E(-2EX \cdot X) + E((EX)^2) =&amp;lt;/math&amp;gt;&amp;lt;math&amp;gt; E(X^2) - 2EX \cdot EX + (EX)^2 =&amp;lt;/math&amp;gt;&amp;lt;math&amp;gt; E(X^2) - (EX)^2&amp;lt;/math&amp;gt;&lt;br /&gt;
*# &amp;lt;math&amp;gt;Var(X + a) = VarX&amp;lt;/math&amp;gt;&lt;br /&gt;
*# &amp;lt;math&amp;gt;Var(aX) = a^2 VarX&amp;lt;/math&amp;gt;&lt;br /&gt;
*# Ако су &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; независне са коначним варијансама, онда је &amp;lt;math&amp;gt;Var(X + Y) = VarX + VarY&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Коваријанса:&#039;&#039;&#039; &amp;lt;math&amp;gt;Cov(X, Y) = E[(X - EX)(Y - EY)]&amp;lt;/math&amp;gt; (одступање од очекиване вредности обе променљиве)&lt;br /&gt;
** &#039;&#039;&#039;Теорема 4.3:&#039;&#039;&#039; &amp;lt;math&amp;gt;Cov(X, Y) = E(XY) - EX \cdot EY&amp;lt;/math&amp;gt;&lt;br /&gt;
*** Доказ: &amp;lt;math&amp;gt;Cov(X, Y) =&amp;lt;/math&amp;gt;&amp;lt;math&amp;gt; E(XY - EX \cdot Y - X \cdot EY + EX \cdot EY) =&amp;lt;/math&amp;gt;&amp;lt;math&amp;gt; E(XY) + E(-EX \cdot Y) + E(-X \cdot EY) + E(EX \cdot EY) =&amp;lt;/math&amp;gt;&amp;lt;math&amp;gt; E(XY) - EX \cdot EY - EY \cdot EX + EX \cdot EY =&amp;lt;/math&amp;gt;&amp;lt;math&amp;gt; E(XY) - EX \cdot EY&amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Теорема 4.4:&#039;&#039;&#039; &amp;lt;math&amp;gt;Var(X + Y) = VarX + VarY + 2Cov(X, Y)&amp;lt;/math&amp;gt;&lt;br /&gt;
*** Доказ: &amp;lt;math&amp;gt;Var(X + Y) =&amp;lt;/math&amp;gt;&amp;lt;math&amp;gt; E(X + Y - E(X + Y))^2 =&amp;lt;/math&amp;gt;&amp;lt;math&amp;gt; E(X + Y - EX - EY)^2 =&amp;lt;/math&amp;gt;&amp;lt;math&amp;gt; E((X - EX) + (Y - EY))^2 =&amp;lt;/math&amp;gt;&amp;lt;math&amp;gt; E((X - EX)^2 + 2(X - EX)(Y - EY) + (Y - EY)^2) =&amp;lt;/math&amp;gt;&amp;lt;math&amp;gt; VarX + VarY + 2Cov(X, Y)&amp;lt;/math&amp;gt;&lt;br /&gt;
* Особине коваријансе за променљиве &amp;lt;math&amp;gt;X, Y, Z&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;a, b \in \mathbb{R}&amp;lt;/math&amp;gt;:&lt;br /&gt;
*# Ако су &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; независне, &amp;lt;math&amp;gt;Cov(X, Y) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
*# &amp;lt;math&amp;gt;Cov(X, Y) = Cov(Y, X)&amp;lt;/math&amp;gt;&lt;br /&gt;
*# &amp;lt;math&amp;gt;Cov(X, X) = VarX&amp;lt;/math&amp;gt;&lt;br /&gt;
*# &amp;lt;math&amp;gt;Cov(aX, bY) = abCov(X, Y)&amp;lt;/math&amp;gt;&lt;br /&gt;
*# &amp;lt;math&amp;gt;Cov(X + Y, Z) = Cov(X, Z) + Cov(Y, Z)&amp;lt;/math&amp;gt;&lt;br /&gt;
*# &amp;lt;math&amp;gt;Cov(X + a, Y + b) = Cov(X, Y)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Коефицијент корелације:&#039;&#039;&#039; &amp;lt;math&amp;gt;\rho(X, Y) = \frac{Cov(X, Y)}{\sqrt{VarX} \sqrt{VarY} }&amp;lt;/math&amp;gt; (за &amp;lt;math&amp;gt;VarX, VarY &amp;gt; 0&amp;lt;/math&amp;gt;)&lt;br /&gt;
** &#039;&#039;&#039;Теорема 4.5:&#039;&#039;&#039;&lt;br /&gt;
**# &amp;lt;math&amp;gt;-1 \leq \rho(X, Y) \leq 1&amp;lt;/math&amp;gt;&lt;br /&gt;
**#* Доказ: уочимо случајну променљиву &amp;lt;math&amp;gt;\frac{X}{\sqrt{VarX} } + \frac{Y}{\sqrt{VarY} }&amp;lt;/math&amp;gt;. &amp;lt;math&amp;gt;0 \leq Var\left(\frac{X}{\sqrt{VarX} } + \frac{Y}{\sqrt{VarY} }\right) =&amp;lt;/math&amp;gt;&amp;lt;math&amp;gt; Var\left(\frac{X}{\sqrt{VarX} }\right) + Var\left(\frac{Y}{\sqrt{VarY} }\right) + 2Cov\left(\frac{X}{\sqrt{VarX} }, \frac{Y}{\sqrt{VarY} }\right) =&amp;lt;/math&amp;gt;&amp;lt;math&amp;gt; \frac{1}{\sqrt{VarX}^2} \cdot VarX + \frac{1}{\sqrt{VarY}^2} \cdot VarY + \frac{2}{\sqrt{VarX} \cdot \sqrt{VarY} } Cov(X, Y) =&amp;lt;/math&amp;gt;&amp;lt;math&amp;gt; 2 + 2\rho(X, Y)&amp;lt;/math&amp;gt;. Како је &amp;lt;math&amp;gt;2 + 2\rho(X, Y) \geq 0&amp;lt;/math&amp;gt;, онда важи &amp;lt;math&amp;gt;\rho \geq -1&amp;lt;/math&amp;gt;. Аналогно томе, уколико уочимо случајну променљиву са - уместо + добијамо &amp;lt;math&amp;gt;\rho \leq 1&amp;lt;/math&amp;gt;.&lt;br /&gt;
**# &amp;lt;math&amp;gt;\rho(X, Y) = \pm 1&amp;lt;/math&amp;gt; ако и само ако &amp;lt;math&amp;gt;P(Y = aX + b) = 1&amp;lt;/math&amp;gt;, где је &amp;lt;math&amp;gt;\DeclareMathOperator{\sgn}{sgn}a \neq 0, b \in \mathbb{R}, \sgn a = \sgn \rho(X, Y)&amp;lt;/math&amp;gt;&lt;br /&gt;
**# &amp;lt;math&amp;gt;\rho(aX + b, cY + d) = \pm \rho(X, Y)&amp;lt;/math&amp;gt; за &amp;lt;math&amp;gt;a, c \in \mathbb{R} \setminus \{0\}, b, d \in \mathbb{R}&amp;lt;/math&amp;gt;, где се узима знак плус ако је &amp;lt;math&amp;gt;ac&amp;lt;/math&amp;gt; позитивно, а минус у супротном&lt;br /&gt;
** Корелација:&lt;br /&gt;
*** &amp;lt;math&amp;gt;\rho(X, Y) = 0 \implies&amp;lt;/math&amp;gt; променљиве су некорелисане&lt;br /&gt;
*** &amp;lt;math&amp;gt;\rho(X, Y) &amp;gt; 0 \implies&amp;lt;/math&amp;gt; променљиве су позитивно корелисане&lt;br /&gt;
*** &amp;lt;math&amp;gt;\rho(X, Y) &amp;lt; 0 \implies&amp;lt;/math&amp;gt; променљиве су негативно корелисане&lt;br /&gt;
** &#039;&#039;&#039;Моменти:&#039;&#039;&#039;&lt;br /&gt;
*** &amp;lt;math&amp;gt;E(X^k)&amp;lt;/math&amp;gt;: моменат реда &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
*** &amp;lt;math&amp;gt;E|X|^k&amp;lt;/math&amp;gt;: апсолутни моменат реда &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
*** &amp;lt;math&amp;gt;E(X - EX)^k&amp;lt;/math&amp;gt;: централни моменат реда &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Квантили:&#039;&#039;&#039; за дату случајну променљиву &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; са расподелом &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt;, квантил реда &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; је сваки број &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; за који важи &amp;lt;math&amp;gt;F(x^-) \leq p \leq F(x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
*** За сваку расподелу и за свако &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; постоји бар један квантил тог реда.&lt;br /&gt;
*** Ознака: &amp;lt;math&amp;gt;\varepsilon_p&amp;lt;/math&amp;gt;&lt;br /&gt;
*** &amp;lt;math&amp;gt;\varepsilon_{\frac{1}{2} }&amp;lt;/math&amp;gt;: медијана (мера средње вредности)&lt;br /&gt;
*** &amp;lt;math&amp;gt;\varepsilon_{\frac{1}{4} }&amp;lt;/math&amp;gt;: први квартил&lt;br /&gt;
*** &amp;lt;math&amp;gt;\varepsilon_{\frac{3}{4} }&amp;lt;/math&amp;gt;: други квартил&lt;br /&gt;
&lt;br /&gt;
=== Нумеричке карактеристике расподела ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Нумеричке карактеристике честих расподела&lt;br /&gt;
! Расподела&lt;br /&gt;
! Математичко очекивање&lt;br /&gt;
! Варијанса&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;Bern(p)&amp;lt;/math&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;qp&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;Bin(n, p)&amp;lt;/math&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;np&amp;lt;/math&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;npq&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;Poiss(\lambda)&amp;lt;/math&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;Exp(\lambda)&amp;lt;/math&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\frac{1}{\lambda}&amp;lt;/math&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\frac{1}{\lambda^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;Unif(a, b)&amp;lt;/math&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\frac{a+b}{2}&amp;lt;/math&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\frac{(b-a)^2}{12}&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;\mathcal{N}(\mu, \sigma^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Карактеристичне функције ==&lt;br /&gt;
* Дефинише се као &amp;lt;math&amp;gt;\varphi_X(t) = Ee^{itX}&amp;lt;/math&amp;gt;.&lt;br /&gt;
** За дискретно &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt;\varphi_X = \sum_k e^{itx_k} P(X = x_k)&amp;lt;/math&amp;gt; за све вредности &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;&lt;br /&gt;
** За непрекидно &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt;\varphi_X = \int_{-\infty}^{+\infty} e^{itx} f(x) dx&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; означава густину&lt;br /&gt;
* &#039;&#039;&#039;Теорема 5.1:&#039;&#039;&#039;&lt;br /&gt;
*# За сваку случајну променљиву постоји одговарајућа карактеристична функција&lt;br /&gt;
*# Различитим карактеристичним функцијама одговарају различите расподеле и обрнуто&lt;br /&gt;
*# За сваку случајну променљиву и свака два реална или комплексна броја важи &amp;lt;math&amp;gt;\varphi_{aX+b}(t) = e^{ibt} \varphi_X(at)&amp;lt;/math&amp;gt;&lt;br /&gt;
*# Ако случајна променљива има момент реда &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; тада важи &amp;lt;math&amp;gt;E(X^n) = i^{-n} \varphi^{(n)}(0)&amp;lt;/math&amp;gt;&lt;br /&gt;
*# За две независне случајне променљиве важи &amp;lt;math&amp;gt;\varphi_{X + Y}(t) = \varphi_X(t) \varphi_Y(t)&amp;lt;/math&amp;gt;&lt;br /&gt;
*#* Доказ: &amp;lt;math&amp;gt;\varphi_{X + Y}(t) = Ee^{it(X+Y)} = Ee^{itX} Ee^{itY} = \varphi_X(t) \varphi_Y(t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Граничне теореме ==&lt;br /&gt;
* Низ случајних променљивих &amp;lt;math&amp;gt;\{X_n\}&amp;lt;/math&amp;gt;:&lt;br /&gt;
** &#039;&#039;&#039;строго конвергира&#039;&#039;&#039; (конвергира скоро свуда) ка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; ако &amp;lt;math&amp;gt;P\left(\lim_{n \to \infty} X_n = X\right) = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;конвергира у вероватноћи&#039;&#039;&#039; ка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; ако је &amp;lt;math&amp;gt;\lim_{n \to \infty} P\left(\left|X_n - X\right|\geq \varepsilon\right) = 0&amp;lt;/math&amp;gt; за свако &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;конвергира у расподели&#039;&#039;&#039; (слабо конвергира) ка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; ако &amp;lt;math&amp;gt;\lim_{n \to \infty} F_{X_n}(x) = F_X(x)&amp;lt;/math&amp;gt; у свакој тачки &amp;lt;math&amp;gt;x \in \mathbb{R}&amp;lt;/math&amp;gt; у којој је &amp;lt;math&amp;gt;F_X(x)&amp;lt;/math&amp;gt; непрекидна&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;math&amp;gt;L_p&amp;lt;/math&amp;gt;-конвергира&#039;&#039;&#039; ка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; за &amp;lt;math&amp;gt;p \geq 1&amp;lt;/math&amp;gt; ако &amp;lt;math&amp;gt;\lim_{n \to \infty} E\left|X_n - X\right|^p = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
*** За &amp;lt;math&amp;gt;p = 2&amp;lt;/math&amp;gt; се каже да &#039;&#039;&#039;конвергира у средњем квадратном&#039;&#039;&#039; ка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;&lt;br /&gt;
* Из строге конвергенције следи конвергенција у вероватноћи, из конвергенције у вероватноћи следи конвергенција у расподели, а из &amp;lt;math&amp;gt;L_p&amp;lt;/math&amp;gt; конвергенције такође следи конвергенција у вероватноћи.&lt;br /&gt;
* &#039;&#039;&#039;Теорема 6.1:&#039;&#039;&#039; (теорема о непрекидности) Нека је &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt; низ случајних променљивих са карактеристичним функцијама &amp;lt;math&amp;gt;\varphi_n&amp;lt;/math&amp;gt; и нека је &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; случајна променљива са карактеристичном функцијом &amp;lt;math&amp;gt;\varphi&amp;lt;/math&amp;gt;. Низ &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt; конвергира у расподели ка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; ако и само ако је &amp;lt;math&amp;gt;\lim_{n \to \infty} \varphi_n(t) = \varphi(t)&amp;lt;/math&amp;gt; за свако &amp;lt;math&amp;gt;t \in \mathbb{R}&amp;lt;/math&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;Теорема 6.2:&#039;&#039;&#039; (апроксимација биномне расподеле Пуасоновом) ако &amp;lt;math&amp;gt;X \sim Bin(n, p)&amp;lt;/math&amp;gt; и ако &amp;lt;math&amp;gt;np &amp;lt; 5, n \geq 30&amp;lt;/math&amp;gt; онда &amp;lt;math&amp;gt;X \sim Poiss(np)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Теорема 6.3:&#039;&#039;&#039; (неједнакост Маркова) ако је &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; ненегативна случајна променљива и постоји &amp;lt;math&amp;gt;EX&amp;lt;/math&amp;gt;, онда &amp;lt;math&amp;gt;P(X \geq \varepsilon) \leq \frac{EX}{\varepsilon}&amp;lt;/math&amp;gt; за свако &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Теорема 6.4:&#039;&#039;&#039; (неједнакост Чебишева) ако постоји &amp;lt;math&amp;gt;VarX&amp;lt;/math&amp;gt;, тада је &amp;lt;math&amp;gt;P\left(\left|X - EX\right| \geq \varepsilon\right) \leq \frac{VarX}{\varepsilon^2}&amp;lt;/math&amp;gt; за свако &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt;&lt;br /&gt;
** Доказ: на основу неједнакости Маркова, &amp;lt;math&amp;gt;P\left(\left|X - EX\right| \geq \varepsilon\right) = P((X - EX)^2 \geq \varepsilon^2) \leq \frac{E(X - EX)^2}{\varepsilon^2} = \frac{VarX}{\varepsilon^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Теорема 6.5:&#039;&#039;&#039; (слаби закон великих бројева) Нека су &amp;lt;math&amp;gt;X_1, X_2...&amp;lt;/math&amp;gt; независне случајне променљиве са истим очекивањем &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; и са коначним варијансама &amp;lt;math&amp;gt;VarX_k \leq V&amp;lt;/math&amp;gt; за свако &amp;lt;math&amp;gt;k \in \mathbb{N}&amp;lt;/math&amp;gt;, где је &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; позитивна константа. Тада низ аритметичких средина &amp;lt;math&amp;gt;\frac{X_1 + ... + X_n}{n}&amp;lt;/math&amp;gt; конвергира у вероватноћи ка &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;Теорема 6.6:&#039;&#039;&#039; (Борелов строги закон великих бројева) Ако је &amp;lt;math&amp;gt;S_n&amp;lt;/math&amp;gt; број успеха у &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; Бернулијевих експеримената са вероватноћом успеха &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;. тада је &amp;lt;math&amp;gt;P\left(\lim_{n \to \infty} \frac{S_n}{n} = p\right) = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Теорема 6.7:&#039;&#039;&#039; (Коломогоровљев строги закон великих бројева)&lt;br /&gt;
*# Ако су &amp;lt;math&amp;gt;X_1, ..., X_n&amp;lt;/math&amp;gt; независне случајне променљиве са истом расподелом и очекивањем &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;, тада важи &amp;lt;math&amp;gt;P\left(\lim_{n \to \infty} \frac{X_1 + ... + X_n}{n} = \mu\right) = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
*# Ако су &amp;lt;math&amp;gt;X_1, ..., X_n&amp;lt;/math&amp;gt; независне случајне променљиве са истом расподелом и ако постоји &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; такав да је &amp;lt;math&amp;gt;P\left(\lim_{n \to \infty} \frac{X_1 + ... + X_n}{n} = b\right) = 1&amp;lt;/math&amp;gt;, тада све променљиве имају очекивање &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Теорема 6.8:&#039;&#039;&#039; (централна гранична теорема) Ако су &amp;lt;math&amp;gt;X_1, X_2...&amp;lt;/math&amp;gt; независне, са истом расподелом, очекивањем &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; и коначним варијансама &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;, тада &amp;lt;math&amp;gt;Z_n = \frac{X_1 + ... + X_n - n\mu}{\sigma \sqrt{n} }&amp;lt;/math&amp;gt; конвергира у расподели ка &amp;lt;math&amp;gt;Z \sim \mathcal{N}(0, 1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
** У пракси мора да важи &amp;lt;math&amp;gt;n \geq 30&amp;lt;/math&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;Теорема 6.9:&#039;&#039;&#039; (апроксимација биномне расподеле нормалном, Моавр-Лапласова теорема) Ако је &amp;lt;math&amp;gt;X \sim Bin(n, p)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Z_n = \frac{X - np}{\sqrt{npq} }&amp;lt;/math&amp;gt; тада &amp;lt;math&amp;gt;Z_n&amp;lt;/math&amp;gt; конвергира у расподели ка &amp;lt;math&amp;gt;Z \sim \mathcal{N}(0, 1)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Доказ: следи из централне граничне теореме, &amp;lt;math&amp;gt;X = X_1 + ... + X_n, X_1, ..., X_n \sim Bern(p)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Апроксимација Пуасонове расподеле нормалном:&#039;&#039;&#039; &amp;lt;math&amp;gt;X \sim Poiss(\lambda), \lambda \geq 10 \implies X \sim \mathcal{N}(\lambda, \lambda)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Статистика ==&lt;br /&gt;
=== Основни појмови ===&lt;br /&gt;
* &#039;&#039;&#039;Популација:&#039;&#039;&#039; скуп &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt; елемената &amp;lt;math&amp;gt;\omega&amp;lt;/math&amp;gt; (паралела из вероватноће: скуп исхода)&lt;br /&gt;
* &#039;&#039;&#039;Обележје:&#039;&#039;&#039; нумеричка особина &amp;lt;math&amp;gt;X(\omega)&amp;lt;/math&amp;gt; елемената &amp;lt;math&amp;gt;\omega \in \Omega&amp;lt;/math&amp;gt; (паралела из вероватноће: случајна променљива)&lt;br /&gt;
* &#039;&#039;&#039;Статистички експеримент (у пракси):&#039;&#039;&#039; регистровање вредности &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; на неком (правом) подскупу скупа &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt;, који називамо &#039;&#039;&#039;узорак&#039;&#039;&#039;. На основу узорка доносимо закључке о расподели &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;Случајни узорак&#039;&#039;&#039; димензије &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; је скуп независних случајних променљивих са истом расподелом.&lt;br /&gt;
** &#039;&#039;&#039;Реализовани узорак&#039;&#039;&#039; представља реализоване вредности случајних променљивих у посматраном експерименту.&lt;br /&gt;
* &#039;&#039;&#039;Статистика&#039;&#039;&#039; је случајна променљива &amp;lt;math&amp;gt;f(X_1, X_2, ..., X_n)&amp;lt;/math&amp;gt; која зависи само од случајних променљивих из узорка, не и од непознатих параметара расподеле.&lt;br /&gt;
** Њена расподела сме да зависи од ових параметара.&lt;br /&gt;
** &#039;&#039;&#039;Реализована вредност статистике:&#039;&#039;&#039; &amp;lt;math&amp;gt;f(x_1, x_2, ..., x_n)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Оцене параметара ===&lt;br /&gt;
* Обележје &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; има расподелу &amp;lt;math&amp;gt;P_{\theta}&amp;lt;/math&amp;gt; која зависи од скупа параметара &amp;lt;math&amp;gt;\theta \in \Theta&amp;lt;/math&amp;gt;.&lt;br /&gt;
** &amp;lt;math&amp;gt;\Theta&amp;lt;/math&amp;gt;: скуп допустивих расподела&lt;br /&gt;
** &amp;lt;math&amp;gt;P_{\theta}&amp;lt;/math&amp;gt;: фамилија расподела&lt;br /&gt;
** Ако не знамо &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt; можемо да бирамо узорак и на основу њега оцењујемо &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Тачкаста оцена ====&lt;br /&gt;
* Реализована вредност статистике &amp;lt;math&amp;gt;\hat{\theta}(X_1, ..., X_n)&amp;lt;/math&amp;gt;&lt;br /&gt;
* Карактеристике:&lt;br /&gt;
*# &amp;lt;math&amp;gt;\hat{\theta}(X_1, ..., X_n)&amp;lt;/math&amp;gt; је центрирана (непристрасна) ако је &amp;lt;math&amp;gt;E\hat{\theta} = \theta&amp;lt;/math&amp;gt; за свако &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt;.&lt;br /&gt;
*# &amp;lt;math&amp;gt;\hat{\theta}(X_1, ..., X_n)&amp;lt;/math&amp;gt; је асимптотски непристрасна ако &amp;lt;math&amp;gt;E\hat{\theta} \to_{n \to \infty} \theta&amp;lt;/math&amp;gt;.&lt;br /&gt;
*# &amp;lt;math&amp;gt;\hat{\theta}(X_1, ..., X_n)&amp;lt;/math&amp;gt; је стабилна (постојана) ако конвергира у вероватноћи ка &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt;.&lt;br /&gt;
*# Ако су &amp;lt;math&amp;gt;\hat{\theta_1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat{\theta_2}&amp;lt;/math&amp;gt; две оцене истог параметра &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\hat{\theta_1}&amp;lt;/math&amp;gt; је боља од &amp;lt;math&amp;gt;\hat{\theta_2}&amp;lt;/math&amp;gt; ако је &amp;lt;math&amp;gt;E(\hat{\theta_1} - \theta)^2 \leq E(\hat{\theta_2} - \theta)^2&amp;lt;/math&amp;gt; с тим што строга неједнакост важи за бар једно &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt;.&lt;br /&gt;
*# Ако су &amp;lt;math&amp;gt;\hat{\theta_1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat{\theta_2}&amp;lt;/math&amp;gt; две центриране оцене истог параметра &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt;, кажемо да је &amp;lt;math&amp;gt;\hat{\theta_1}&amp;lt;/math&amp;gt; ефикасније од &amp;lt;math&amp;gt;\hat{\theta_2}&amp;lt;/math&amp;gt; ако је &amp;lt;math&amp;gt;Var\hat{\theta_1} \leq Var\hat{\theta_2}&amp;lt;/math&amp;gt; с тим што строга неједнакост важи за бар једно &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Интервална оцена ====&lt;br /&gt;
* &#039;&#039;&#039;Интервал поверења:&#039;&#039;&#039; је интервал који, за дат узорак обима &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; из расподеле &amp;lt;math&amp;gt;P_{\theta}&amp;lt;/math&amp;gt;, садржи непознати параметар &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt; са вероватноћом &amp;lt;math&amp;gt;1-\alpha&amp;lt;/math&amp;gt;.&lt;br /&gt;
** Двострани интервал поверења: &amp;lt;math&amp;gt;[A, B]&amp;lt;/math&amp;gt;&lt;br /&gt;
** Једнострани интервал поверења: &amp;lt;math&amp;gt;(-\infty, B]&amp;lt;/math&amp;gt; или &amp;lt;math&amp;gt;[A, +\infty)&amp;lt;/math&amp;gt;&lt;br /&gt;
** &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; су статистике.&lt;br /&gt;
* &#039;&#039;&#039;Студентова &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-расподела:&#039;&#039;&#039;&lt;br /&gt;
** &amp;lt;math&amp;gt;f(x) = \frac{\Gamma\left(\frac{n+1}{2}\right)}{\sqrt{n\pi} \Gamma\left(\frac{n}{2}\right)} \left(1 + \frac{x^2}{n}\right)^{-\frac{n+1}{2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
** Гама функција: &amp;lt;math&amp;gt;\Gamma(x) = \int_0^{+\infty} e^{-t} t^{x-1} dt&amp;lt;/math&amp;gt;&lt;br /&gt;
*** &amp;lt;math&amp;gt;\Gamma(x+1) = x\Gamma(x) \implies \Gamma(n) = (n-1)!&amp;lt;/math&amp;gt;&lt;br /&gt;
*** &amp;lt;math&amp;gt;\Gamma(1) = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
*** &amp;lt;math&amp;gt;\Gamma\left(\frac{1}{2}\right) = \sqrt{\pi}&amp;lt;/math&amp;gt;&lt;br /&gt;
** За &amp;lt;math&amp;gt;n \geq 30&amp;lt;/math&amp;gt; можемо апроксимирати са &amp;lt;math&amp;gt;\mathcal{N}(0, 1)&amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Теорема 7.1:&#039;&#039;&#039; Ако су &amp;lt;math&amp;gt;X_1, ..., X_n \sim \mathcal{N}(\mu, \sigma^2)&amp;lt;/math&amp;gt; са непознатим &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;, нека је &amp;lt;math&amp;gt;\hat{\mu} = \frac{X_1 + ... + X_n}{n}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;s^2 = \frac{1}{n-1} \sum_{k = 1}^n (X_k - \hat{\mu})^2&amp;lt;/math&amp;gt;, тада важи &amp;lt;math&amp;gt;\frac{\hat{\mu} - \mu}{\frac{s}{\sqrt{n}}} \sim t(n-1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;Хи квадрат расподела:&#039;&#039;&#039;&lt;br /&gt;
** &amp;lt;math&amp;gt;f(x) = \begin{cases}&lt;br /&gt;
    \frac{1}{2^{\frac{n}{2}} \Gamma\left(\frac{n}{2}\right)} x^{\frac{n}{2} - 1} e^{-\frac{x}{2}}, &amp;amp; x &amp;gt; 0 \\&lt;br /&gt;
    0,                                                                                             &amp;amp; x \leq 0&lt;br /&gt;
\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Теорема 7.2:&#039;&#039;&#039; Ако су &amp;lt;math&amp;gt;Z_1, Z_2, ..., Z_n \sim \mathcal{N}(0, 1)&amp;lt;/math&amp;gt;, њихов збир има расподелу &amp;lt;math&amp;gt;\chi^2(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
** &#039;&#039;&#039;Теорема 7.3:&#039;&#039;&#039; Ако су &amp;lt;math&amp;gt;X_1, X_2, ..., X_n \sim \mathcal{N}(\mu, \sigma^2)&amp;lt;/math&amp;gt; са непознатим &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;:&lt;br /&gt;
*** Ако је &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; познато: &amp;lt;math&amp;gt;\frac{nS_0^2}{\sigma^2} \sim \chi^2(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
*** Ако је &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; непознато: &amp;lt;math&amp;gt;\frac{(n-1)s^2}{\sigma^2} \sim \chi^2(n-1)&amp;lt;/math&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Процена непознатих параметара у интервалима поверења код &amp;lt;math&amp;gt;\mathcal{N}(\mu, \sigma^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Процена&lt;br /&gt;
! Двострани интервал&lt;br /&gt;
! Једнострани интервал&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;3&amp;quot; | Процена непознатог &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;&lt;br /&gt;
! Познато &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\mu \in \left[\hat{\mu} - \varepsilon_{1 - \frac{\alpha}{2}} \frac{\sigma}{\sqrt{n}}, \hat{\mu} + \varepsilon_{1 - \frac{\alpha}{2}} \frac{\sigma}{\sqrt{n}}\right]&amp;lt;/math&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\mu \in \left(-\infty, \hat{\mu} + \varepsilon_{1 - \alpha} \frac{\sigma}{\sqrt{n}}\right]&amp;lt;/math&amp;gt; или &amp;lt;math&amp;gt;\mu \in \left[\hat{\mu} - \varepsilon_{1 - \alpha} \frac{\sigma}{\sqrt{n}}, +\infty\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | Непознато &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Процењујемо &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt;s^2 = \frac{1}{n-1} \sum_{k = 1}^n (X_k - \hat{\mu})^2&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\frac{\hat{\mu} - \mu}{\frac{s}{\sqrt{n}}} \sim t(n-1)&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;\mu \in \left[\hat{\mu} - \varepsilon_{1 - \frac{\alpha}{2}} \frac{s}{\sqrt{n}}, \hat{\mu} + \varepsilon_{1 - \frac{\alpha}{2}} \frac{s}{\sqrt{n}}\right]&amp;lt;/math&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\mu \in \left(-\infty, \hat{\mu} + \varepsilon_{1 - \alpha} \frac{s}{\sqrt{n}}\right]&amp;lt;/math&amp;gt; или &amp;lt;math&amp;gt;\mu \in \left[\hat{\mu} - \varepsilon_{1 - \alpha} \frac{s}{\sqrt{n}}, +\infty\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | Процена непознатог &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;&lt;br /&gt;
! Познато &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\sigma^2 \in \left[\frac{nS_0^2}{\varepsilon_{1 - \frac{\alpha}{2}}}, \frac{nS_0^2}{\varepsilon_{\frac{\alpha}{2}}}\right]&amp;lt;/math&amp;gt;, квантили из &amp;lt;math&amp;gt;\chi^2(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\sigma^2 \in \left[0, \frac{nS_0^2}{\varepsilon_{\alpha}}\right]&amp;lt;/math&amp;gt; или &amp;lt;math&amp;gt;\sigma^2 \in \left[\frac{nS_0^2}{\varepsilon_{1 - \alpha}}, +\infty\right)&amp;lt;/math&amp;gt;, квантили из &amp;lt;math&amp;gt;\chi^2(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! Непознато &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\sigma^2 \in \left[\frac{(n-1)s^2}{\varepsilon_{1 - \frac{\alpha}{2}}}, \frac{(n-1)s^2}{\varepsilon_{\frac{\alpha}{2}}}\right]&amp;lt;/math&amp;gt;, квантили из &amp;lt;math&amp;gt;\chi^2(n-1)&amp;lt;/math&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\sigma^2 \in \left[0, \frac{(n-1)s^2}{\varepsilon_{\alpha}}\right]&amp;lt;/math&amp;gt; или &amp;lt;math&amp;gt;\sigma^2 \in \left[\frac{(n-1)s^2}{\varepsilon_{1 - \alpha}}, +\infty\right)&amp;lt;/math&amp;gt;, квантили из &amp;lt;math&amp;gt;\chi^2(n-1)&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
* Ако расподела није &amp;lt;math&amp;gt;\mathcal{N}(\mu, \sigma^2)&amp;lt;/math&amp;gt;, за &amp;lt;math&amp;gt;n &amp;gt; 30&amp;lt;/math&amp;gt; важи централна гранична теорема, тако да можемо апроксимирати интервал поверења као за нормалну расподелу.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Квантили студентове расподеле &amp;lt;math&amp;gt;t(n)&amp;lt;/math&amp;gt; (за &amp;lt;math&amp;gt;n &amp;gt; 30&amp;lt;/math&amp;gt; се апроксимира нормалном)&lt;br /&gt;
! &lt;br /&gt;
! colspan=&amp;quot;6&amp;quot; | &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; !! 0.75  !! 0.90  !! 0.95  !! 0.975  !! 0.99   !! 0.995&lt;br /&gt;
|-&lt;br /&gt;
| 1              || 1.000 || 3.078 || 6.314 || 12.706 || 31.821 || 63.657&lt;br /&gt;
|-&lt;br /&gt;
| 2              || 0.816 || 1.886 || 2.920 || 4.303  || 6.965  || 9.925&lt;br /&gt;
|-&lt;br /&gt;
| 3              || 0.765 || 1.638 || 2.353 || 3.182  || 4.541  || 5.841&lt;br /&gt;
|-&lt;br /&gt;
| 4              || 0.741 || 1.533 || 2.132 || 2.776  || 3.747  || 4.604&lt;br /&gt;
|-&lt;br /&gt;
| 5              || 0.727 || 1.476 || 2.015 || 2.571  || 3.365  || 4.032&lt;br /&gt;
|-&lt;br /&gt;
| 6              || 0.718 || 1.440 || 1.943 || 2.447  || 3.143  || 3.707&lt;br /&gt;
|-&lt;br /&gt;
| 7              || 0.711 || 1.415 || 1.895 || 2.365  || 2.998  || 3.499&lt;br /&gt;
|-&lt;br /&gt;
| 8              || 0.706 || 1.397 || 1.860 || 2.306  || 2.896  || 3.355&lt;br /&gt;
|-&lt;br /&gt;
| 9              || 0.703 || 1.383 || 1.833 || 2.262  || 2.821  || 3.250&lt;br /&gt;
|-&lt;br /&gt;
| 10             || 0.700 || 1.372 || 1.812 || 2.228  || 2.764  || 3.169&lt;br /&gt;
|-&lt;br /&gt;
| 11             || 0.697 || 1.363 || 1.796 || 2.201  || 2.718  || 3.106&lt;br /&gt;
|-&lt;br /&gt;
| 12             || 0.695 || 1.356 || 1.782 || 2.179  || 2.681  || 3.055&lt;br /&gt;
|-&lt;br /&gt;
| 13             || 0.694 || 1.350 || 1.771 || 2.160  || 2.650  || 3.012&lt;br /&gt;
|-&lt;br /&gt;
| 14             || 0.692 || 1.345 || 1.761 || 2.145  || 2.624  || 2.977&lt;br /&gt;
|-&lt;br /&gt;
| 15             || 0.691 || 1.341 || 1.753 || 2.131  || 2.602  || 2.947&lt;br /&gt;
|-&lt;br /&gt;
| 16             || 0.690 || 1.337 || 1.746 || 2.120  || 2.583  || 2.921&lt;br /&gt;
|-&lt;br /&gt;
| 17             || 0.689 || 1.333 || 1.740 || 2.110  || 2.567  || 2.898&lt;br /&gt;
|-&lt;br /&gt;
| 18             || 0.688 || 1.330 || 1.734 || 2.101  || 2.552  || 2.878&lt;br /&gt;
|-&lt;br /&gt;
| 19             || 0.688 || 1.328 || 1.729 || 2.093  || 2.539  || 2.861&lt;br /&gt;
|-&lt;br /&gt;
| 20             || 0.687 || 1.325 || 1.725 || 2.086  || 2.528  || 2.845&lt;br /&gt;
|-&lt;br /&gt;
| 21             || 0.686 || 1.323 || 1.721 || 2.080  || 2.518  || 2.831&lt;br /&gt;
|-&lt;br /&gt;
| 22             || 0.686 || 1.321 || 1.717 || 2.074  || 2.508  || 2.819&lt;br /&gt;
|-&lt;br /&gt;
| 23             || 0.685 || 1.319 || 1.714 || 2.069  || 2.500  || 2.807&lt;br /&gt;
|-&lt;br /&gt;
| 24             || 0.685 || 1.318 || 1.711 || 2.064  || 2.492  || 2.797&lt;br /&gt;
|-&lt;br /&gt;
| 25             || 0.684 || 1.316 || 1.708 || 2.060  || 2.485  || 2.787&lt;br /&gt;
|-&lt;br /&gt;
| 26             || 0.684 || 1.315 || 1.706 || 2.056  || 2.479  || 2.779&lt;br /&gt;
|-&lt;br /&gt;
| 27             || 0.684 || 1.314 || 1.703 || 2.052  || 2.473  || 2.771&lt;br /&gt;
|-&lt;br /&gt;
| 28             || 0.683 || 1.313 || 1.701 || 2.048  || 2.467  || 2.763&lt;br /&gt;
|-&lt;br /&gt;
| 29             || 0.683 || 1.311 || 1.699 || 2.045  || 2.462  || 2.756&lt;br /&gt;
|-&lt;br /&gt;
| 30             || 0.683 || 1.310 || 1.697 || 2.042  || 2.457  || 2.750&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Квантили &amp;lt;math&amp;gt;\chi^2(n)&amp;lt;/math&amp;gt; расподеле (за &amp;lt;math&amp;gt;n &amp;gt; 30&amp;lt;/math&amp;gt; се апроксимира нормалном)&lt;br /&gt;
! &lt;br /&gt;
! colspan=&amp;quot;8&amp;quot; | &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; !! 0.005   !! 0.01    !! 0.025   !! 0.05    !! 0.95   !! 0.975  !! 0.99   !! 0.995 &lt;br /&gt;
|-&lt;br /&gt;
| 1              || 0.00004 || 0.00016 || 0.00098 || 0.00393 || 3.841  || 5.024  || 6.635  || 7.879&lt;br /&gt;
|-&lt;br /&gt;
| 2              || 0.010   || 0.0201  || 0.0506  || 0.103   || 5.991  || 7.378  || 9.210  || 10.597&lt;br /&gt;
|-&lt;br /&gt;
| 3              || 0.072   || 0.115   || 0.216   || 0.352   || 7.815  || 9.348  || 11.345 || 12.838&lt;br /&gt;
|-&lt;br /&gt;
| 4              || 0.207   || 0.297   || 0.484   || 0.711   || 9.488  || 11.143 || 13.277 || 14.860&lt;br /&gt;
|-&lt;br /&gt;
| 5              || 0.412   || 0.554   || 0.831   || 1.145   || 11.070 || 12.832 || 13.086 || 16.750&lt;br /&gt;
|-&lt;br /&gt;
| 6              || 0.676   || 0.872   || 1.237   || 1.635   || 12.592 || 14.449 || 16.812 || 18.548&lt;br /&gt;
|-&lt;br /&gt;
| 7              || 0.989   || 1.239   || 1.690   || 2.167   || 14.067 || 16.013 || 18.475 || 20.278&lt;br /&gt;
|-&lt;br /&gt;
| 8              || 1.344   || 1.646   || 2.180   || 2.733   || 15.507 || 17.535 || 20.090 || 21.955&lt;br /&gt;
|-&lt;br /&gt;
| 9              || 1.735   || 2.088   || 2.700   || 3.325   || 16.919 || 19.023 || 21.666 || 23.589&lt;br /&gt;
|-&lt;br /&gt;
| 10             || 2.156   || 2.558   || 3.247   || 3.940   || 18.307 || 20.483 || 23.209 || 25.188&lt;br /&gt;
|-&lt;br /&gt;
| 11             || 2.603   || 3.053   || 3.816   || 4.575   || 19.675 || 21.920 || 24.725 || 26.757&lt;br /&gt;
|-&lt;br /&gt;
| 12             || 3.074   || 3.571   || 4.404   || 5.226   || 21.026 || 23.337 || 26.217 || 28.300&lt;br /&gt;
|-&lt;br /&gt;
| 13             || 3.565   || 4.107   || 5.009   || 5.892   || 22.362 || 24.736 || 27.688 || 29.819&lt;br /&gt;
|-&lt;br /&gt;
| 14             || 4.075   || 4.660   || 5.629   || 6.571   || 23.685 || 26.119 || 29.141 || 31.319&lt;br /&gt;
|-&lt;br /&gt;
| 15             || 4.601   || 5.229   || 6.262   || 7.261   || 24.996 || 27.488 || 30.578 || 32.801&lt;br /&gt;
|-&lt;br /&gt;
| 16             || 5.142   || 5.812   || 6.908   || 7.962   || 26.296 || 28.845 || 32.000 || 24.267&lt;br /&gt;
|-&lt;br /&gt;
| 17             || 5.697   || 6.408   || 7.564   || 8.672   || 27.587 || 30.191 || 33.409 || 35.718&lt;br /&gt;
|-&lt;br /&gt;
| 18             || 6.265   || 7.015   || 8.231   || 9.390   || 28.869 || 31.526 || 34.805 || 37.156&lt;br /&gt;
|-&lt;br /&gt;
| 19             || 6.844   || 7.633   || 8.907   || 10.117  || 30.144 || 32.852 || 36.191 || 38.582&lt;br /&gt;
|-&lt;br /&gt;
| 20             || 7.434   || 8.260   || 9.591   || 10.851  || 31.410 || 34.170 || 37.566 || 39.997&lt;br /&gt;
|-&lt;br /&gt;
| 21             || 8.034   || 8.897   || 10.283  || 11.591  || 32.671 || 35.479 || 38.932 || 41.401&lt;br /&gt;
|-&lt;br /&gt;
| 22             || 8.643   || 9.542   || 10.982  || 12.338  || 33.924 || 36.781 || 40.289 || 42.796&lt;br /&gt;
|-&lt;br /&gt;
| 23             || 9.260   || 10.196  || 11.689  || 13.091  || 35.172 || 38.076 || 41.638 || 44.181&lt;br /&gt;
|-&lt;br /&gt;
| 24             || 9.886   || 10.856  || 12.401  || 13.484  || 36.415 || 39.364 || 42.980 || 45.558&lt;br /&gt;
|-&lt;br /&gt;
| 25             || 10.520  || 11.524  || 13.120  || 14.611  || 37.652 || 40.646 || 44.314 || 46.928&lt;br /&gt;
|-&lt;br /&gt;
| 26             || 11.160  || 12.198  || 13.844  || 15.379  || 38.885 || 41.923 || 45.642 || 48.290&lt;br /&gt;
|-&lt;br /&gt;
| 27             || 11.808  || 12.879  || 14.573  || 16.151  || 40.113 || 43.194 || 46.963 || 49.645&lt;br /&gt;
|-&lt;br /&gt;
| 28             || 12.461  || 13.565  || 15.308  || 16.928  || 41.337 || 44.461 || 48.278 || 50.993&lt;br /&gt;
|-&lt;br /&gt;
| 29             || 13.121  || 14.256  || 16.047  || 17.708  || 42.557 || 45.772 || 49.588 || 52.336&lt;br /&gt;
|-&lt;br /&gt;
| 30             || 13.787  || 14.953  || 16.791  || 18.493  || 43.773 || 46.979 || 50.892 || 53.672&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Тестирање параметарских хипотеза ===&lt;br /&gt;
* Ознаке:&lt;br /&gt;
** &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: нулта хипотеза&lt;br /&gt;
*** &amp;lt;math&amp;gt;H_0: \theta \in \Theta_0&amp;lt;/math&amp;gt;&lt;br /&gt;
** &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: алтернативна хипотеза&lt;br /&gt;
*** &amp;lt;math&amp;gt;H_1: \theta \in \Theta_1&amp;lt;/math&amp;gt;&lt;br /&gt;
*** Увек важи да &amp;lt;math&amp;gt;\Theta_0 \cap \Theta_1 = \varnothing&amp;lt;/math&amp;gt;&lt;br /&gt;
*** Најчешће важи да &amp;lt;math&amp;gt;\Theta_0 \cup \Theta_1 = \Theta&amp;lt;/math&amp;gt;&lt;br /&gt;
** &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;: статистика теста&lt;br /&gt;
** &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt;: област одбацивања (критична област), хипотезу одбацујемо ако &amp;lt;math&amp;gt;S \in C&amp;lt;/math&amp;gt;, иначе не одбацујемо&lt;br /&gt;
** &amp;lt;math&amp;gt;\gamma(\theta)&amp;lt;/math&amp;gt;: моћ теста, односно вероватноћа да ће &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; бити одбачена&lt;br /&gt;
*** &amp;lt;math&amp;gt;\gamma(\theta) = P(S \in C)&amp;lt;/math&amp;gt;&lt;br /&gt;
** &amp;lt;math&amp;gt;\alpha(\theta)&amp;lt;/math&amp;gt;: вероватноћа грешке првог реда, односно вероватноћа одбацивања &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; иако је тачна&lt;br /&gt;
*** &amp;lt;math&amp;gt;\alpha(\theta) = \gamma(\theta)&amp;lt;/math&amp;gt; за &amp;lt;math&amp;gt;\theta \in \Theta_0&amp;lt;/math&amp;gt;&lt;br /&gt;
** &amp;lt;math&amp;gt;\alpha = \sup_{\theta \in \Theta_0} \alpha(\theta)&amp;lt;/math&amp;gt;: ниво значајности теста&lt;br /&gt;
** &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;: критична вредност теста (граница области одбацивања)&lt;br /&gt;
*** Пример: &amp;lt;math&amp;gt;C = [c, +\infty)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;C = (-\infty, c]&amp;lt;/math&amp;gt;&lt;br /&gt;
* Померањем области одбацивања грешка једног реда расте а другог се смањује.&lt;br /&gt;
** Уколико желимо да смањимо обе грешке треба да повећамо обим узорка.&lt;br /&gt;
* Начини тестирања параметарских хипотеза (обрађени на вежбама):&lt;br /&gt;
*# ...&lt;br /&gt;
*# преко интервала поверења&lt;br /&gt;
*# помоћу &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; вредности: &amp;lt;math&amp;gt;p = \sup P(S = s)&amp;lt;/math&amp;gt; (или &amp;lt;math&amp;gt;S \leq s&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;S \geq s&amp;lt;/math&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== Тестирање непараметарских хипотеза ===&lt;br /&gt;
* Начини тестирања непараметарских хипотеза:&lt;br /&gt;
** Поређењем хистограма: &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; тест&lt;br /&gt;
** Поређењем функција расподеле: тест Колмогоров-Смирнова&lt;br /&gt;
* Емипиријска функција расподеле: &amp;lt;math&amp;gt;F_n(x) = \begin{cases}&lt;br /&gt;
    0, &amp;amp; x &amp;lt; X_{(1)} \\&lt;br /&gt;
    \frac{k}{n}, &amp;amp; X_{(k)} \leq x &amp;lt; X_{(k+1)} \\&lt;br /&gt;
    1, &amp;amp; x \geq X_{(n)}&lt;br /&gt;
\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Теорема 7.4&#039;&#039;&#039; (Гливенко-Кантели): Нека је &amp;lt;math&amp;gt;F_n&amp;lt;/math&amp;gt; емпиријска функција расподеле добијена из независног узорка обима &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; из расподеле са функцијом расподеле &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;. Тада је &amp;lt;math&amp;gt;P(\lim_{n \to \infty} \sup_{x \in \mathbb{R}} \left|F_n(x) - F(x)\right| = 0) = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Теорема 7.5:&#039;&#039;&#039; Нека је &amp;lt;math&amp;gt;F_n&amp;lt;/math&amp;gt; емпиријска функција расподеле добијена из независног узорка обима &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; из расподеле са функцијом расподеле &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;. Тада је &amp;lt;math&amp;gt;\lim_{n \to \infty} P(\sqrt{n} \sup_{x \in \mathbb{R}} \left|F_n(x) - F(x)\right| \leq t) = K(t)&amp;lt;/math&amp;gt;.&lt;br /&gt;
** &amp;lt;math&amp;gt;K(t)&amp;lt;/math&amp;gt; се назива Колмогоровом функцијом расподеле&lt;br /&gt;
* &#039;&#039;&#039;Тест Колмогоров-Смирнова:&#039;&#039;&#039;ако је &amp;lt;math&amp;gt;F_0&amp;lt;/math&amp;gt; функција расподеле непрекидне случајне променљиве и ми тестирамо &amp;lt;math&amp;gt;H_0: F = F_0&amp;lt;/math&amp;gt;, онда важи да &amp;lt;math&amp;gt;\sqrt{n} \sup_{x \in \mathbb{R}} \left|F_n(x) - F(x)\right| &amp;gt; \varepsilon_{1 - \alpha} \implies&amp;lt;/math&amp;gt; одбацујемо хипотезу (ако је квантил из &amp;lt;math&amp;gt;K(t)&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Вероватноћа и статистика]]&lt;br /&gt;
[[Категорија:Водичи]]&lt;/div&gt;</summary>
		<author><name>Bambula</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%9C%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%98%D0%B5_%D0%BE%D0%BA%D1%82%D0%BE%D0%B1%D0%B0%D1%80_2025&amp;diff=8321</id>
		<title>ОС1/Модификације октобар 2025</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%9C%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%98%D0%B5_%D0%BE%D0%BA%D1%82%D0%BE%D0%B1%D0%B0%D1%80_2025&amp;diff=8321"/>
		<updated>2026-03-09T16:39:00Z</updated>

		<summary type="html">&lt;p&gt;Bambula: /* Modifikacija: joinAll */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Modifikacija: joinAll ==&lt;br /&gt;
&lt;br /&gt;
Doodati sistemske pozive &amp;lt;code&amp;gt;thread_add_child&amp;lt;/code&amp;gt; i &amp;lt;code&amp;gt;thread_join_all&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;code&amp;gt;thread_add_child&amp;lt;/code&amp;gt; registruje dete-nit za tekuću (pozivajuću) nit.&lt;br /&gt;
&amp;lt;code&amp;gt;thread_join_all&amp;lt;/code&amp;gt; blokira tekuću nit dok se sva njena deca ne izvrše.&lt;br /&gt;
U okviru C++ API dodati nestatičke metode &amp;lt;code&amp;gt;addChild(Thread* child)&amp;lt;/code&amp;gt; i &amp;lt;code&amp;gt;joinAll()&amp;lt;/code&amp;gt; u klasu &amp;lt;code&amp;gt;Thread&amp;lt;/code&amp;gt;.&lt;br /&gt;
Napisati test program: nit A pravi 3×B i 1×C, svaki B pravi 3×C. Roditelj čeka svu svoju decu pre nego što nastavi.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&lt;br /&gt;
==== TCB.hpp ====&lt;br /&gt;
Dodato na vrhu fajla (forward declaration):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
class Semaphore;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nova polja u &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; sekciji:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
TCB* parent;            // pokazivač na roditelja (nullptr ako nema)&lt;br /&gt;
int childCount;         // broj nezavršene dece&lt;br /&gt;
Semaphore* childrenSem; // semafor na koji roditelj čeka u joinAll&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nove metode u &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; sekciji:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
static void addChild(TCB* parent, TCB* child);&lt;br /&gt;
static void joinAllChildren();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TCB.cpp ====&lt;br /&gt;
Dodat include na vrhu:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;../h/Semaphore.hpp&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
U konstruktoru, inicijalizacija novih polja (posle &amp;lt;code&amp;gt;this-&amp;gt;finished = false;&amp;lt;/code&amp;gt;):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
this-&amp;gt;parent = nullptr;&lt;br /&gt;
this-&amp;gt;childCount = 0;&lt;br /&gt;
this-&amp;gt;childrenSem = nullptr;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Izmenjen &amp;lt;code&amp;gt;dispatch()&amp;lt;/code&amp;gt; — else grana proširena da obavesti roditelja kad dete završi:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void TCB::dispatch() {&lt;br /&gt;
    TCB *old = running;&lt;br /&gt;
    if (!old-&amp;gt;isFinished()) {&lt;br /&gt;
        Scheduler::put(old);&lt;br /&gt;
    } else {&lt;br /&gt;
        if (old-&amp;gt;parent != nullptr) {&lt;br /&gt;
            old-&amp;gt;parent-&amp;gt;childCount--;&lt;br /&gt;
            if (old-&amp;gt;parent-&amp;gt;childCount == 0 &amp;amp;&amp;amp; old-&amp;gt;parent-&amp;gt;childrenSem != nullptr) {&lt;br /&gt;
                old-&amp;gt;parent-&amp;gt;childrenSem-&amp;gt;sem_signal();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    running = Scheduler::get();&lt;br /&gt;
    contextSwitch(&amp;amp;old-&amp;gt;context, &amp;amp;running-&amp;gt;context);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nove funkcije:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void TCB::addChild(TCB* parent, TCB* child) {&lt;br /&gt;
    child-&amp;gt;parent = parent;&lt;br /&gt;
    parent-&amp;gt;childCount++;&lt;br /&gt;
    if (parent-&amp;gt;childrenSem == nullptr) {&lt;br /&gt;
        Semaphore::createSemaphore(&amp;amp;parent-&amp;gt;childrenSem, 0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void TCB::joinAllChildren() {&lt;br /&gt;
    if (running-&amp;gt;childCount &amp;lt;= 0) return;&lt;br /&gt;
    running-&amp;gt;childrenSem-&amp;gt;sem_wait();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== syscall_c.hpp ====&lt;br /&gt;
Dodate deklaracije:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void thread_add_child(thread_t child);&lt;br /&gt;
void thread_join_all();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== syscall_c.cpp ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void thread_add_child(thread_t child) {&lt;br /&gt;
    if (child == nullptr) return;&lt;br /&gt;
    do_syscall(0x16, (uint64)child);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void thread_join_all() {&lt;br /&gt;
    do_syscall(0x17);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== RISCV.cpp (handleSupervisorTrap) ====&lt;br /&gt;
Dodate nove case grane u switch (posle case 0x13 dispatch):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
case 0x16: {&lt;br /&gt;
    TCB *child = (TCB*)arg1;&lt;br /&gt;
    TCB::addChild(TCB::running, child);&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
case 0x17: {&lt;br /&gt;
    TCB::joinAllChildren();&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== syscall_cpp.hpp ====&lt;br /&gt;
Dodate metode u klasu &amp;lt;code&amp;gt;Thread&amp;lt;/code&amp;gt; (public sekcija):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void addChild(Thread* child);&lt;br /&gt;
void joinAll();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== syscall_cpp.cpp ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void Thread::addChild(Thread* child) {&lt;br /&gt;
    thread_add_child(child-&amp;gt;getMyHandle());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Thread::joinAll() {&lt;br /&gt;
    thread_join_all();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test primer ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;../h/syscall_cpp.hpp&amp;quot;&lt;br /&gt;
#include &amp;quot;../h/syscall_c.hpp&amp;quot;&lt;br /&gt;
#include &amp;quot;../h/printing.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
class ThreadC : public Thread {&lt;br /&gt;
public:&lt;br /&gt;
    ThreadC(int id) : Thread(), id(id) {}&lt;br /&gt;
private:&lt;br /&gt;
    int id;&lt;br /&gt;
    void run() override {&lt;br /&gt;
        printString(&amp;quot;    C&amp;quot;);&lt;br /&gt;
        printInt(id);&lt;br /&gt;
        printString(&amp;quot; started\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        volatile int sum = 0;&lt;br /&gt;
        for (int i = 0; i &amp;lt; 3000; i++)&lt;br /&gt;
            for (int j = 0; j &amp;lt; 3000; j++)&lt;br /&gt;
                sum += j;&lt;br /&gt;
&lt;br /&gt;
        printString(&amp;quot;    C&amp;quot;);&lt;br /&gt;
        printInt(id);&lt;br /&gt;
        printString(&amp;quot; finished\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class ThreadB : public Thread {&lt;br /&gt;
public:&lt;br /&gt;
    ThreadB(int id) : Thread(), id(id) {}&lt;br /&gt;
private:&lt;br /&gt;
    int id;&lt;br /&gt;
    void run() override {&lt;br /&gt;
        printString(&amp;quot;  B&amp;quot;);&lt;br /&gt;
        printInt(id);&lt;br /&gt;
        printString(&amp;quot; started, creating 3 C children\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        ThreadC* c[3];&lt;br /&gt;
        for (int i = 0; i &amp;lt; 3; i++) {&lt;br /&gt;
            c[i] = new ThreadC(id * 10 + i);&lt;br /&gt;
            c[i]-&amp;gt;start();&lt;br /&gt;
            this-&amp;gt;addChild(c[i]);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        printString(&amp;quot;  B&amp;quot;);&lt;br /&gt;
        printInt(id);&lt;br /&gt;
        printString(&amp;quot; waiting for children...\n&amp;quot;);&lt;br /&gt;
        this-&amp;gt;joinAll();&lt;br /&gt;
&lt;br /&gt;
        printString(&amp;quot;  B&amp;quot;);&lt;br /&gt;
        printInt(id);&lt;br /&gt;
        printString(&amp;quot; all children done!\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        for (int i = 0; i &amp;lt; 3; i++) delete c[i];&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void joinAllTest() {&lt;br /&gt;
    printString(&amp;quot;A started, creating 3 B and 1 C\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    ThreadB* b[3];&lt;br /&gt;
    for (int i = 0; i &amp;lt; 3; i++) {&lt;br /&gt;
        b[i] = new ThreadB(i);&lt;br /&gt;
        b[i]-&amp;gt;start();&lt;br /&gt;
        thread_add_child(b[i]-&amp;gt;getMyHandle());&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    ThreadC* c = new ThreadC(99);&lt;br /&gt;
    c-&amp;gt;start();&lt;br /&gt;
    thread_add_child(c-&amp;gt;getMyHandle());&lt;br /&gt;
&lt;br /&gt;
    printString(&amp;quot;A waiting for all children...\n&amp;quot;);&lt;br /&gt;
    thread_join_all();&lt;br /&gt;
&lt;br /&gt;
    printString(&amp;quot;\n=== A: ALL children done! ===\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    for (int i = 0; i &amp;lt; 3; i++) delete b[i];&lt;br /&gt;
    delete c;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Napomena:&#039;&#039;&#039; &amp;lt;code&amp;gt;start()&amp;lt;/code&amp;gt; mora biti pozvan PRE &amp;lt;code&amp;gt;addChild()&amp;lt;/code&amp;gt; jer &amp;lt;code&amp;gt;start()&amp;lt;/code&amp;gt; interno poziva &amp;lt;code&amp;gt;thread_create()&amp;lt;/code&amp;gt; koji postavlja &amp;lt;code&amp;gt;myHandle&amp;lt;/code&amp;gt;. Bez toga, &amp;lt;code&amp;gt;getMyHandle()&amp;lt;/code&amp;gt; vraća &amp;lt;code&amp;gt;nullptr&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Očekivan output ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A started, creating 3 B and 1 C&lt;br /&gt;
A waiting for all children...&lt;br /&gt;
  B0 started, creating 3 C children&lt;br /&gt;
  B0 waiting for children...&lt;br /&gt;
  B1 started, creating 3 C children&lt;br /&gt;
  B1 waiting for children...&lt;br /&gt;
  B2 started, creating 3 C children&lt;br /&gt;
  B2 waiting for children...&lt;br /&gt;
    C99 started&lt;br /&gt;
    C99 finished&lt;br /&gt;
    C0 started&lt;br /&gt;
    C0 finished&lt;br /&gt;
    C1 started&lt;br /&gt;
    C1 finished&lt;br /&gt;
    ...svi C završe...&lt;br /&gt;
  B0 all children done!&lt;br /&gt;
  B1 all children done!&lt;br /&gt;
  B2 all children done!&lt;br /&gt;
&lt;br /&gt;
=== A: ALL children done! ===&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Kako radi ====&lt;br /&gt;
Svaki TCB ima polje &amp;lt;code&amp;gt;parent&amp;lt;/code&amp;gt; (ko je roditelj) i &amp;lt;code&amp;gt;childCount&amp;lt;/code&amp;gt; (koliko dece još radi). Roditelj se blokira na semaforu (&amp;lt;code&amp;gt;childrenSem&amp;lt;/code&amp;gt;, inicijalno 0). Kad nit završi, u &amp;lt;code&amp;gt;dispatch()&amp;lt;/code&amp;gt; se dekrementira &amp;lt;code&amp;gt;parent-&amp;gt;childCount&amp;lt;/code&amp;gt;. Tek kad poslednje dete spusti brojač na 0, poziva se &amp;lt;code&amp;gt;sem_signal()&amp;lt;/code&amp;gt; koji deblokirara roditelja.&lt;/div&gt;</summary>
		<author><name>Bambula</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%9C%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%98%D0%B5_%D0%BE%D0%BA%D1%82%D0%BE%D0%B1%D0%B0%D1%80_2025&amp;diff=8320</id>
		<title>ОС1/Модификације октобар 2025</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%9C%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%98%D0%B5_%D0%BE%D0%BA%D1%82%D0%BE%D0%B1%D0%B0%D1%80_2025&amp;diff=8320"/>
		<updated>2026-03-09T16:32:10Z</updated>

		<summary type="html">&lt;p&gt;Bambula: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Modifikacija: joinAll ==&lt;br /&gt;
&lt;br /&gt;
Dodati sistemske pozive &amp;lt;code&amp;gt;thread_add_child&amp;lt;/code&amp;gt; i &amp;lt;code&amp;gt;thread_join_all&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;code&amp;gt;thread_add_child&amp;lt;/code&amp;gt; registruje dete-nit za tekuću (pozivajuću) nit.&lt;br /&gt;
&amp;lt;code&amp;gt;thread_join_all&amp;lt;/code&amp;gt; blokira tekuću nit dok se sva njena deca ne izvrše.&lt;br /&gt;
U okviru C++ API dodati nestatičke metode &amp;lt;code&amp;gt;addChild(Thread* child)&amp;lt;/code&amp;gt; i &amp;lt;code&amp;gt;joinAll()&amp;lt;/code&amp;gt; u klasu &amp;lt;code&amp;gt;Thread&amp;lt;/code&amp;gt;.&lt;br /&gt;
Napisati test program: nit A pravi 3×B i 1×C, svaki B pravi 3×C. Roditelj čeka svu svoju decu pre nego što nastavi.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&lt;br /&gt;
==== TCB.hpp ====&lt;br /&gt;
Dodato na vrhu fajla (forward declaration):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
class Semaphore;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nova polja u &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; sekciji:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
TCB* parent;            // pokazivač na roditelja (nullptr ako nema)&lt;br /&gt;
int childCount;         // broj nezavršene dece&lt;br /&gt;
Semaphore* childrenSem; // semafor na koji roditelj čeka u joinAll&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nove metode u &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; sekciji:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
static void addChild(TCB* parent, TCB* child);&lt;br /&gt;
static void joinAllChildren();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TCB.cpp ====&lt;br /&gt;
Dodat include na vrhu:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;../h/Semaphore.hpp&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
U konstruktoru, inicijalizacija novih polja (posle &amp;lt;code&amp;gt;this-&amp;gt;finished = false;&amp;lt;/code&amp;gt;):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
this-&amp;gt;parent = nullptr;&lt;br /&gt;
this-&amp;gt;childCount = 0;&lt;br /&gt;
this-&amp;gt;childrenSem = nullptr;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Izmenjen &amp;lt;code&amp;gt;dispatch()&amp;lt;/code&amp;gt; — else grana proširena da obavesti roditelja kad dete završi:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void TCB::dispatch() {&lt;br /&gt;
    TCB *old = running;&lt;br /&gt;
    if (!old-&amp;gt;isFinished()) {&lt;br /&gt;
        Scheduler::put(old);&lt;br /&gt;
    } else {&lt;br /&gt;
        if (old-&amp;gt;parent != nullptr) {&lt;br /&gt;
            old-&amp;gt;parent-&amp;gt;childCount--;&lt;br /&gt;
            if (old-&amp;gt;parent-&amp;gt;childCount == 0 &amp;amp;&amp;amp; old-&amp;gt;parent-&amp;gt;childrenSem != nullptr) {&lt;br /&gt;
                old-&amp;gt;parent-&amp;gt;childrenSem-&amp;gt;sem_signal();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    running = Scheduler::get();&lt;br /&gt;
    contextSwitch(&amp;amp;old-&amp;gt;context, &amp;amp;running-&amp;gt;context);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nove funkcije:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void TCB::addChild(TCB* parent, TCB* child) {&lt;br /&gt;
    child-&amp;gt;parent = parent;&lt;br /&gt;
    parent-&amp;gt;childCount++;&lt;br /&gt;
    if (parent-&amp;gt;childrenSem == nullptr) {&lt;br /&gt;
        Semaphore::createSemaphore(&amp;amp;parent-&amp;gt;childrenSem, 0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void TCB::joinAllChildren() {&lt;br /&gt;
    if (running-&amp;gt;childCount &amp;lt;= 0) return;&lt;br /&gt;
    running-&amp;gt;childrenSem-&amp;gt;sem_wait();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== syscall_c.hpp ====&lt;br /&gt;
Dodate deklaracije:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void thread_add_child(thread_t child);&lt;br /&gt;
void thread_join_all();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== syscall_c.cpp ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void thread_add_child(thread_t child) {&lt;br /&gt;
    if (child == nullptr) return;&lt;br /&gt;
    do_syscall(0x16, (uint64)child);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void thread_join_all() {&lt;br /&gt;
    do_syscall(0x17);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== RISCV.cpp (handleSupervisorTrap) ====&lt;br /&gt;
Dodate nove case grane u switch (posle case 0x13 dispatch):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
case 0x16: {&lt;br /&gt;
    TCB *child = (TCB*)arg1;&lt;br /&gt;
    TCB::addChild(TCB::running, child);&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
case 0x17: {&lt;br /&gt;
    TCB::joinAllChildren();&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== syscall_cpp.hpp ====&lt;br /&gt;
Dodate metode u klasu &amp;lt;code&amp;gt;Thread&amp;lt;/code&amp;gt; (public sekcija):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void addChild(Thread* child);&lt;br /&gt;
void joinAll();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== syscall_cpp.cpp ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void Thread::addChild(Thread* child) {&lt;br /&gt;
    thread_add_child(child-&amp;gt;getMyHandle());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Thread::joinAll() {&lt;br /&gt;
    thread_join_all();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test primer ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;../h/syscall_cpp.hpp&amp;quot;&lt;br /&gt;
#include &amp;quot;../h/syscall_c.hpp&amp;quot;&lt;br /&gt;
#include &amp;quot;../h/printing.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
class ThreadC : public Thread {&lt;br /&gt;
public:&lt;br /&gt;
    ThreadC(int id) : Thread(), id(id) {}&lt;br /&gt;
private:&lt;br /&gt;
    int id;&lt;br /&gt;
    void run() override {&lt;br /&gt;
        printString(&amp;quot;    C&amp;quot;);&lt;br /&gt;
        printInt(id);&lt;br /&gt;
        printString(&amp;quot; started\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        volatile int sum = 0;&lt;br /&gt;
        for (int i = 0; i &amp;lt; 3000; i++)&lt;br /&gt;
            for (int j = 0; j &amp;lt; 3000; j++)&lt;br /&gt;
                sum += j;&lt;br /&gt;
&lt;br /&gt;
        printString(&amp;quot;    C&amp;quot;);&lt;br /&gt;
        printInt(id);&lt;br /&gt;
        printString(&amp;quot; finished\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class ThreadB : public Thread {&lt;br /&gt;
public:&lt;br /&gt;
    ThreadB(int id) : Thread(), id(id) {}&lt;br /&gt;
private:&lt;br /&gt;
    int id;&lt;br /&gt;
    void run() override {&lt;br /&gt;
        printString(&amp;quot;  B&amp;quot;);&lt;br /&gt;
        printInt(id);&lt;br /&gt;
        printString(&amp;quot; started, creating 3 C children\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        ThreadC* c[3];&lt;br /&gt;
        for (int i = 0; i &amp;lt; 3; i++) {&lt;br /&gt;
            c[i] = new ThreadC(id * 10 + i);&lt;br /&gt;
            c[i]-&amp;gt;start();&lt;br /&gt;
            this-&amp;gt;addChild(c[i]);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        printString(&amp;quot;  B&amp;quot;);&lt;br /&gt;
        printInt(id);&lt;br /&gt;
        printString(&amp;quot; waiting for children...\n&amp;quot;);&lt;br /&gt;
        this-&amp;gt;joinAll();&lt;br /&gt;
&lt;br /&gt;
        printString(&amp;quot;  B&amp;quot;);&lt;br /&gt;
        printInt(id);&lt;br /&gt;
        printString(&amp;quot; all children done!\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        for (int i = 0; i &amp;lt; 3; i++) delete c[i];&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void joinAllTest() {&lt;br /&gt;
    printString(&amp;quot;A started, creating 3 B and 1 C\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    ThreadB* b[3];&lt;br /&gt;
    for (int i = 0; i &amp;lt; 3; i++) {&lt;br /&gt;
        b[i] = new ThreadB(i);&lt;br /&gt;
        b[i]-&amp;gt;start();&lt;br /&gt;
        thread_add_child(b[i]-&amp;gt;getMyHandle());&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    ThreadC* c = new ThreadC(99);&lt;br /&gt;
    c-&amp;gt;start();&lt;br /&gt;
    thread_add_child(c-&amp;gt;getMyHandle());&lt;br /&gt;
&lt;br /&gt;
    printString(&amp;quot;A waiting for all children...\n&amp;quot;);&lt;br /&gt;
    thread_join_all();&lt;br /&gt;
&lt;br /&gt;
    printString(&amp;quot;\n=== A: ALL children done! ===\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    for (int i = 0; i &amp;lt; 3; i++) delete b[i];&lt;br /&gt;
    delete c;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Napomena:&#039;&#039;&#039; &amp;lt;code&amp;gt;start()&amp;lt;/code&amp;gt; mora biti pozvan PRE &amp;lt;code&amp;gt;addChild()&amp;lt;/code&amp;gt; jer &amp;lt;code&amp;gt;start()&amp;lt;/code&amp;gt; interno poziva &amp;lt;code&amp;gt;thread_create()&amp;lt;/code&amp;gt; koji postavlja &amp;lt;code&amp;gt;myHandle&amp;lt;/code&amp;gt;. Bez toga, &amp;lt;code&amp;gt;getMyHandle()&amp;lt;/code&amp;gt; vraća &amp;lt;code&amp;gt;nullptr&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Očekivan output ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A started, creating 3 B and 1 C&lt;br /&gt;
A waiting for all children...&lt;br /&gt;
  B0 started, creating 3 C children&lt;br /&gt;
  B0 waiting for children...&lt;br /&gt;
  B1 started, creating 3 C children&lt;br /&gt;
  B1 waiting for children...&lt;br /&gt;
  B2 started, creating 3 C children&lt;br /&gt;
  B2 waiting for children...&lt;br /&gt;
    C99 started&lt;br /&gt;
    C99 finished&lt;br /&gt;
    C0 started&lt;br /&gt;
    C0 finished&lt;br /&gt;
    C1 started&lt;br /&gt;
    C1 finished&lt;br /&gt;
    ...svi C završe...&lt;br /&gt;
  B0 all children done!&lt;br /&gt;
  B1 all children done!&lt;br /&gt;
  B2 all children done!&lt;br /&gt;
&lt;br /&gt;
=== A: ALL children done! ===&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Kako radi ====&lt;br /&gt;
Svaki TCB ima polje &amp;lt;code&amp;gt;parent&amp;lt;/code&amp;gt; (ko je roditelj) i &amp;lt;code&amp;gt;childCount&amp;lt;/code&amp;gt; (koliko dece još radi). Roditelj se blokira na semaforu (&amp;lt;code&amp;gt;childrenSem&amp;lt;/code&amp;gt;, inicijalno 0). Kad nit završi, u &amp;lt;code&amp;gt;dispatch()&amp;lt;/code&amp;gt; se dekrementira &amp;lt;code&amp;gt;parent-&amp;gt;childCount&amp;lt;/code&amp;gt;. Tek kad poslednje dete spusti brojač na 0, poziva se &amp;lt;code&amp;gt;sem_signal()&amp;lt;/code&amp;gt; koji deblokirara roditelja.&lt;/div&gt;</summary>
		<author><name>Bambula</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%9C%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%98%D0%B5_%D0%BE%D0%BA%D1%82%D0%BE%D0%B1%D0%B0%D1%80_2025&amp;diff=8319</id>
		<title>ОС1/Модификације октобар 2025</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%9C%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%98%D0%B5_%D0%BE%D0%BA%D1%82%D0%BE%D0%B1%D0%B0%D1%80_2025&amp;diff=8319"/>
		<updated>2026-03-09T16:31:02Z</updated>

		<summary type="html">&lt;p&gt;Bambula: Уклоњена целокупна садржина странице&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bambula</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%9C%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%98%D0%B5_%D0%BE%D0%BA%D1%82%D0%BE%D0%B1%D0%B0%D1%80_2025&amp;diff=8318</id>
		<title>ОС1/Модификације октобар 2025</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%9C%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%98%D0%B5_%D0%BE%D0%BA%D1%82%D0%BE%D0%B1%D0%B0%D1%80_2025&amp;diff=8318"/>
		<updated>2026-03-09T16:24:24Z</updated>

		<summary type="html">&lt;p&gt;Bambula: Нова страница: == Modifikacija: joinAll ==  Dodati sistemske pozive &amp;lt;code&amp;gt;thread_add_child&amp;lt;/code&amp;gt; i &amp;lt;code&amp;gt;thread_join_all&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;thread_add_child&amp;lt;/code&amp;gt; registruje dete-nit za tekuću (pozivajuću) nit. &amp;lt;code&amp;gt;thread_join_all&amp;lt;/code&amp;gt; blokira tekuću nit dok se sva njena deca ne izvrše. U okviru C++ API dodati nestatičke metode &amp;lt;code&amp;gt;addChild(Thread* child)&amp;lt;/code&amp;gt; i &amp;lt;code&amp;gt;joinAll()&amp;lt;/code&amp;gt; u klasu &amp;lt;code&amp;gt;Thread&amp;lt;/code&amp;gt;. Napisati test program: nit A pravi 3×B i 1×C, svaki B…&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Modifikacija: joinAll ==&lt;br /&gt;
&lt;br /&gt;
Dodati sistemske pozive &amp;lt;code&amp;gt;thread_add_child&amp;lt;/code&amp;gt; i &amp;lt;code&amp;gt;thread_join_all&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;code&amp;gt;thread_add_child&amp;lt;/code&amp;gt; registruje dete-nit za tekuću (pozivajuću) nit.&lt;br /&gt;
&amp;lt;code&amp;gt;thread_join_all&amp;lt;/code&amp;gt; blokira tekuću nit dok se sva njena deca ne izvrše.&lt;br /&gt;
U okviru C++ API dodati nestatičke metode &amp;lt;code&amp;gt;addChild(Thread* child)&amp;lt;/code&amp;gt; i &amp;lt;code&amp;gt;joinAll()&amp;lt;/code&amp;gt; u klasu &amp;lt;code&amp;gt;Thread&amp;lt;/code&amp;gt;.&lt;br /&gt;
Napisati test program: nit A pravi 3×B i 1×C, svaki B pravi 3×C. Roditelj čeka svu svoju decu pre nego što nastavi.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&lt;br /&gt;
==== TCB.hpp ====&lt;br /&gt;
Dodato na vrhu fajla (forward declaration):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
class Semaphore;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nova polja u &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; sekciji:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
TCB* parent;            // pokazivač na roditelja (nullptr ako nema)&lt;br /&gt;
int childCount;         // broj nezavršene dece&lt;br /&gt;
Semaphore* childrenSem; // semafor na koji roditelj čeka u joinAll&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nove metode u &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; sekciji:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
static void addChild(TCB* parent, TCB* child);&lt;br /&gt;
static void joinAllChildren();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TCB.cpp ====&lt;br /&gt;
Dodat include na vrhu:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;../h/Semaphore.hpp&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
U konstruktoru, inicijalizacija novih polja (posle &amp;lt;code&amp;gt;this-&amp;gt;finished = false;&amp;lt;/code&amp;gt;):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
this-&amp;gt;parent = nullptr;&lt;br /&gt;
this-&amp;gt;childCount = 0;&lt;br /&gt;
this-&amp;gt;childrenSem = nullptr;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Izmenjen &amp;lt;code&amp;gt;dispatch()&amp;lt;/code&amp;gt; — else grana proširena da obavesti roditelja kad dete završi:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void TCB::dispatch() {&lt;br /&gt;
    TCB *old = running;&lt;br /&gt;
    if (!old-&amp;gt;isFinished()) {&lt;br /&gt;
        Scheduler::put(old);&lt;br /&gt;
    } else {&lt;br /&gt;
        if (old-&amp;gt;parent != nullptr) {&lt;br /&gt;
            old-&amp;gt;parent-&amp;gt;childCount--;&lt;br /&gt;
            if (old-&amp;gt;parent-&amp;gt;childCount == 0 &amp;amp;&amp;amp; old-&amp;gt;parent-&amp;gt;childrenSem != nullptr) {&lt;br /&gt;
                old-&amp;gt;parent-&amp;gt;childrenSem-&amp;gt;sem_signal();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    running = Scheduler::get();&lt;br /&gt;
    contextSwitch(&amp;amp;old-&amp;gt;context, &amp;amp;running-&amp;gt;context);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nove funkcije:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void TCB::addChild(TCB* parent, TCB* child) {&lt;br /&gt;
    child-&amp;gt;parent = parent;&lt;br /&gt;
    parent-&amp;gt;childCount++;&lt;br /&gt;
    if (parent-&amp;gt;childrenSem == nullptr) {&lt;br /&gt;
        Semaphore::createSemaphore(&amp;amp;parent-&amp;gt;childrenSem, 0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void TCB::joinAllChildren() {&lt;br /&gt;
    if (running-&amp;gt;childCount &amp;lt;= 0) return;&lt;br /&gt;
    running-&amp;gt;childrenSem-&amp;gt;sem_wait();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== syscall_c.hpp ====&lt;br /&gt;
Dodate deklaracije:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void thread_add_child(thread_t child);&lt;br /&gt;
void thread_join_all();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== syscall_c.cpp ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void thread_add_child(thread_t child) {&lt;br /&gt;
    if (child == nullptr) return;&lt;br /&gt;
    do_syscall(0x16, (uint64)child);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void thread_join_all() {&lt;br /&gt;
    do_syscall(0x17);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== RISCV.cpp (handleSupervisorTrap) ====&lt;br /&gt;
Dodate nove case grane u switch (posle case 0x13 dispatch):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
case 0x16: {&lt;br /&gt;
    TCB *child = (TCB*)arg1;&lt;br /&gt;
    TCB::addChild(TCB::running, child);&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
case 0x17: {&lt;br /&gt;
    TCB::joinAllChildren();&lt;br /&gt;
    break;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== syscall_cpp.hpp ====&lt;br /&gt;
Dodate metode u klasu &amp;lt;code&amp;gt;Thread&amp;lt;/code&amp;gt; (public sekcija):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void addChild(Thread* child);&lt;br /&gt;
void joinAll();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== syscall_cpp.cpp ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void Thread::addChild(Thread* child) {&lt;br /&gt;
    thread_add_child(child-&amp;gt;getMyHandle());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Thread::joinAll() {&lt;br /&gt;
    thread_join_all();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test primer ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;../h/syscall_cpp.hpp&amp;quot;&lt;br /&gt;
#include &amp;quot;../h/syscall_c.hpp&amp;quot;&lt;br /&gt;
#include &amp;quot;../h/printing.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
class ThreadC : public Thread {&lt;br /&gt;
public:&lt;br /&gt;
    ThreadC(int id) : Thread(), id(id) {}&lt;br /&gt;
private:&lt;br /&gt;
    int id;&lt;br /&gt;
    void run() override {&lt;br /&gt;
        printString(&amp;quot;    C&amp;quot;);&lt;br /&gt;
        printInt(id);&lt;br /&gt;
        printString(&amp;quot; started\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        volatile int sum = 0;&lt;br /&gt;
        for (int i = 0; i &amp;lt; 3000; i++)&lt;br /&gt;
            for (int j = 0; j &amp;lt; 3000; j++)&lt;br /&gt;
                sum += j;&lt;br /&gt;
&lt;br /&gt;
        printString(&amp;quot;    C&amp;quot;);&lt;br /&gt;
        printInt(id);&lt;br /&gt;
        printString(&amp;quot; finished\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class ThreadB : public Thread {&lt;br /&gt;
public:&lt;br /&gt;
    ThreadB(int id) : Thread(), id(id) {}&lt;br /&gt;
private:&lt;br /&gt;
    int id;&lt;br /&gt;
    void run() override {&lt;br /&gt;
        printString(&amp;quot;  B&amp;quot;);&lt;br /&gt;
        printInt(id);&lt;br /&gt;
        printString(&amp;quot; started, creating 3 C children\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        ThreadC* c[3];&lt;br /&gt;
        for (int i = 0; i &amp;lt; 3; i++) {&lt;br /&gt;
            c[i] = new ThreadC(id * 10 + i);&lt;br /&gt;
            c[i]-&amp;gt;start();&lt;br /&gt;
            this-&amp;gt;addChild(c[i]);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        printString(&amp;quot;  B&amp;quot;);&lt;br /&gt;
        printInt(id);&lt;br /&gt;
        printString(&amp;quot; waiting for children...\n&amp;quot;);&lt;br /&gt;
        this-&amp;gt;joinAll();&lt;br /&gt;
&lt;br /&gt;
        printString(&amp;quot;  B&amp;quot;);&lt;br /&gt;
        printInt(id);&lt;br /&gt;
        printString(&amp;quot; all children done!\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        for (int i = 0; i &amp;lt; 3; i++) delete c[i];&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void joinAllTest() {&lt;br /&gt;
    printString(&amp;quot;A started, creating 3 B and 1 C\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    ThreadB* b[3];&lt;br /&gt;
    for (int i = 0; i &amp;lt; 3; i++) {&lt;br /&gt;
        b[i] = new ThreadB(i);&lt;br /&gt;
        b[i]-&amp;gt;start();&lt;br /&gt;
        thread_add_child(b[i]-&amp;gt;getMyHandle());&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    ThreadC* c = new ThreadC(99);&lt;br /&gt;
    c-&amp;gt;start();&lt;br /&gt;
    thread_add_child(c-&amp;gt;getMyHandle());&lt;br /&gt;
&lt;br /&gt;
    printString(&amp;quot;A waiting for all children...\n&amp;quot;);&lt;br /&gt;
    thread_join_all();&lt;br /&gt;
&lt;br /&gt;
    printString(&amp;quot;\n=== A: ALL children done! ===\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    for (int i = 0; i &amp;lt; 3; i++) delete b[i];&lt;br /&gt;
    delete c;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Napomena:&#039;&#039;&#039; &amp;lt;code&amp;gt;start()&amp;lt;/code&amp;gt; mora biti pozvan PRE &amp;lt;code&amp;gt;addChild()&amp;lt;/code&amp;gt; jer &amp;lt;code&amp;gt;start()&amp;lt;/code&amp;gt; interno poziva &amp;lt;code&amp;gt;thread_create()&amp;lt;/code&amp;gt; koji postavlja &amp;lt;code&amp;gt;myHandle&amp;lt;/code&amp;gt;. Bez toga, &amp;lt;code&amp;gt;getMyHandle()&amp;lt;/code&amp;gt; vraća &amp;lt;code&amp;gt;nullptr&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Očekivan output ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A started, creating 3 B and 1 C&lt;br /&gt;
A waiting for all children...&lt;br /&gt;
  B0 started, creating 3 C children&lt;br /&gt;
  B0 waiting for children...&lt;br /&gt;
  B1 started, creating 3 C children&lt;br /&gt;
  B1 waiting for children...&lt;br /&gt;
  B2 started, creating 3 C children&lt;br /&gt;
  B2 waiting for children...&lt;br /&gt;
    C99 started&lt;br /&gt;
    C99 finished&lt;br /&gt;
    C0 started&lt;br /&gt;
    C0 finished&lt;br /&gt;
    C1 started&lt;br /&gt;
    C1 finished&lt;br /&gt;
    ...svi C završe...&lt;br /&gt;
  B0 all children done!&lt;br /&gt;
  B1 all children done!&lt;br /&gt;
  B2 all children done!&lt;br /&gt;
&lt;br /&gt;
=== A: ALL children done! ===&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Kako radi ====&lt;br /&gt;
Svaki TCB ima polje &amp;lt;code&amp;gt;parent&amp;lt;/code&amp;gt; (ko je roditelj) i &amp;lt;code&amp;gt;childCount&amp;lt;/code&amp;gt; (koliko dece još radi). Roditelj se blokira na semaforu (&amp;lt;code&amp;gt;childrenSem&amp;lt;/code&amp;gt;, inicijalno 0). Kad nit završi, u &amp;lt;code&amp;gt;dispatch()&amp;lt;/code&amp;gt; se dekrementira &amp;lt;code&amp;gt;parent-&amp;gt;childCount&amp;lt;/code&amp;gt;. Tek kad poslednje dete spusti brojač na 0, poziva se &amp;lt;code&amp;gt;sem_signal()&amp;lt;/code&amp;gt; koji deblokirara roditelja.&lt;/div&gt;</summary>
		<author><name>Bambula</name></author>
	</entry>
</feed>