{"id":"informatyka-2019-maj-matura-rozszerzona/zad/1.2","paper_id":"informatyka-2019-maj-matura-rozszerzona","number":"1.2","points":1,"ptype":"open","subject":"informatyka","category":"matura","year":2019,"month":"maj","level":"rozszerzona","text":"Zadanie 1.2. (0-1)\nPodaj, jaką złożoność czasową - kwadratową, liniową, logarytmiczną lub inną (napisz jaką) -\nma Twój algorytm.\nWypełnia\negzaminator\nNr zadania\n1.1.\n1.2.\nMaks. liczba pkt.\n5\n1\nUzyskana liczba pkt.\nMIN_1R","answer":null,"answer_text":"Zadanie 1.2. (0-1)\nWymagania ogólne\nWymagania szczegółowe\nIII. Rozwiązywanie problemów\ni podejmowanie decyzji […]\nz zastosowaniem podejścia algorytmicznego.\n5. Rozwiązywanie problemów\ni podejmowanie decyzji […], stosowanie\npodejścia algorytmicznego.\nZdający:\n4) dobiera efektywny algorytm do\nrozwiązania sytuacji problemowej i zapisuje\ngo w wybranej notacji;\n5) posługuje się podstawowymi technikami\nalgorytmicznymi;\n16) opisuje własności algorytmów na\npodstawie ich analizy;\n17) ocenia zgodność algorytmu ze\nspecyfikacją problemu;\n18) oblicza liczbę operacji wykonywanych\nprzez algorytm;\n20) bada efektywność komputerowych\nrozwiązań problemów.\nSchemat punktowania\n1 p. - za poprawną odpowiedź.\n0 p. - za podanie odpowiedzi błędnej albo brak odpowiedzi.\nPoprawna odpowiedź\nNp. dla wyszukiwania binarnego: log(n) lub logarytmiczna, dla wyszukiwania liniowego -\nzłożoność liniowa.","solution":"## Poprawna odpowiedź\n\n**Złożoność czasowa: logarytmiczna - O(log n)**\n\n(odpowiedź zgodna z algorytmem z zadania 1.1 - wyszukiwanie binarne)\n\n## Sposób 1 - analiza pętli wyszukiwania binarnego\n\nKluczowe pytanie: **ile razy wykonuje się pętla `dopóki p < k`?**\n\n- W każdej iteracji środek `s = (p+k) div 2` dzieli przedział `[p, k]` na dwie połowy.\n- Wybierając jedną z połówek (w zależności od warunku A[s] mod 2), długość przedziału kurczy się **co najmniej dwukrotnie** w każdej iteracji.\n\n**Formalnie:** jeśli na początku przedział ma długość n, to po k iteracjach ma długość co najwyżej n/2^k. Pętla kończy się gdy długość = 1, czyli n/2^k ≤ 1, skąd k ≥ log₂(n).\n\n**Liczba iteracji = ⌈log₂(n)⌉ = O(log n).**\n\n## Sposób 2 - alternatywne odpowiedzi w zależności od rozwiązania\n\n- Jeśli w zadaniu 1.1 napisałeś **wyszukiwanie liniowe** (`for i := 1 to n do `) → złożoność **liniowa O(n)** (i tylko 3 pkt w 1.1).\n- Jeśli wyszukiwanie binarne → **logarytmiczna O(log n)** (5 pkt w 1.1).\n- Inne nietypowe rozwiązania:\n- skok co `sqrt(n)` (jump search) → O(√n).\n- rekurencyjne dzielenie połowiczne → O(log n) (równoważne binary search).\n\n## Reference informatyczny - klasy złożoności\n\n> Reference - Złożoność asymptotyczna:\n> - **O(1)** - stała (np. dostęp do elementu tablicy).\n> - **O(log n)** - logarytmiczna (binarka, wysokość zbalansowanego BST).\n> - **O(n)** - liniowa (przegląd tablicy, sumowanie).\n> - **O(n log n)** - quasi-liniowa (mergesort, heapsort, quicksort średni).\n> - **O(n²)** - kwadratowa (bubble, insertion, selection sort).\n> - **O(2ⁿ)** - wykładnicza (rekurencyjny Fibonacci bez memoizacji).\n>\n> Reguły uproszczeń:\n> - Stałe się pomija: `5n + 100` → `O(n)`.\n> - Suma → bierzemy największy człon: `O(n²) + O(n)` → `O(n²)`.\n> - Iloczyn pętli zagnieżdżonych → mnoży się: `O(n)·O(log n)` → `O(n log n)`.\n\n## Schemat oceniania CKE\n\n> Klucz CKE (zadanie 1.2, max 1 pkt):\n> - **1 pkt** - poprawna odpowiedź zgodna z algorytmem z 1.1\n> - **0 pkt** - błędna lub brak\n\n**Akceptowane:** `O(log n)`, `logarytmiczna`, `log(n)`, `log₂(n)` - wszystkie równoważne.\n**Dla rozwiązania liniowego z 1.1:** `O(n)`, `liniowa`.\n\n## Typowe pułapki\n\n- **Pomylenie z poziomem pętli** - jedna pętla nie oznacza automatycznie O(n). Trzeba przeanalizować, **o ile** kurczy się przestrzeń w każdej iteracji.\n- **Niezgodność odpowiedzi z algorytmem 1.1** - jeśli w 1.1 napisałeś binarkę, ale w 1.2 piszesz \"liniowa\" - zero punktów.\n- **Mylenie log₂(n) z log₁₀(n)** - w informatyce logarytm domyślnie o podstawie 2 (lub e - nie ma znaczenia dla notacji O).\n- **Pisanie tylko `O(log)` bez `n`** - to formalnie niepoprawne.\n\n## Złożoność obliczeniowa\n\nAlgorytm wyszukiwania binarnego:\n- **Czas: O(log n)** - pętla wykonuje co najwyżej ⌈log₂ n⌉ iteracji, każda w czasie O(1).\n- **Pamięć: O(1)** - stała liczba zmiennych pomocniczych.","image":"img/informatyka-2019-maj-matura-rozszerzona/zad-1.2.webp","solution_image":null,"topics":null,"page_from":3,"source":"ocr","answer_source":null,"answer_text_source":"ocr","solution_source":"maturazai","text_source":"ocr","source_label":"Informatyka · Matura · maj 2019 (rozszerzona)","subject_label":"Informatyka","category_label":"Matura","text_html":"<p>Zadanie 1.2. (0-1)<br>Podaj, jaką złożoność czasową - kwadratową, liniową, logarytmiczną lub inną (napisz jaką) -<br>ma Twój algorytm.<br>Wypełnia<br>egzaminator<br>Nr zadania<br>1.1.<br>1.2.<br>Maks. liczba pkt.<br>5<br>1<br>Uzyskana liczba pkt.<br>MIN_1R</p>","answer_text_html":"<p>Zadanie 1.2. (0-1)<br>Wymagania ogólne<br>Wymagania szczegółowe<br>III. Rozwiązywanie problemów<br>i podejmowanie decyzji […]<br>z zastosowaniem podejścia algorytmicznego.</p>\n<ol><li>Rozwiązywanie problemów</li></ol>\n<p>i podejmowanie decyzji […], stosowanie<br>podejścia algorytmicznego.<br>Zdający:</p>\n<ol><li>dobiera efektywny algorytm do</li></ol>\n<p>rozwiązania sytuacji problemowej i zapisuje<br>go w wybranej notacji;</p>\n<ol><li>posługuje się podstawowymi technikami</li></ol>\n<p>algorytmicznymi;</p>\n<ol><li>opisuje własności algorytmów na</li></ol>\n<p>podstawie ich analizy;</p>\n<ol><li>ocenia zgodność algorytmu ze</li></ol>\n<p>specyfikacją problemu;</p>\n<ol><li>oblicza liczbę operacji wykonywanych</li></ol>\n<p>przez algorytm;</p>\n<ol><li>bada efektywność komputerowych</li></ol>\n<p>rozwiązań problemów.<br>Schemat punktowania<br>1 p. - za poprawną odpowiedź.<br>0 p. - za podanie odpowiedzi błędnej albo brak odpowiedzi.<br>Poprawna odpowiedź<br>Np. dla wyszukiwania binarnego: log(n) lub logarytmiczna, dla wyszukiwania liniowego -<br>złożoność liniowa.</p>","solutions":[{"source":"maturazai","label":"maturazai.pl (AI)","kind":"text","html":"<h4>Poprawna odpowiedź</h4>\n<p><strong>Złożoność czasowa: logarytmiczna - O(log n)</strong></p>\n<p>(odpowiedź zgodna z algorytmem z zadania 1.1 - wyszukiwanie binarne)</p>\n<h4>Sposób 1 - analiza pętli wyszukiwania binarnego</h4>\n<p>Kluczowe pytanie: <strong>ile razy wykonuje się pętla <code>dopóki p &lt; k</code>?</strong></p>\n<ul><li>W każdej iteracji środek <code>s = (p+k) div 2</code> dzieli przedział <code>[p, k]</code> na dwie połowy.</li><li>Wybierając jedną z połówek (w zależności od warunku A[s] mod 2), długość przedziału kurczy się <strong>co najmniej dwukrotnie</strong> w każdej iteracji.</li></ul>\n<p><strong>Formalnie:</strong> jeśli na początku przedział ma długość n, to po k iteracjach ma długość co najwyżej n/2^k. Pętla kończy się gdy długość = 1, czyli n/2^k ≤ 1, skąd k ≥ log₂(n).</p>\n<p><strong>Liczba iteracji = ⌈log₂(n)⌉ = O(log n).</strong></p>\n<h4>Sposób 2 - alternatywne odpowiedzi w zależności od rozwiązania</h4>\n<ul><li>Jeśli w zadaniu 1.1 napisałeś <strong>wyszukiwanie liniowe</strong> (<code>for i := 1 to n do </code>) → złożoność <strong>liniowa O(n)</strong> (i tylko 3 pkt w 1.1).</li><li>Jeśli wyszukiwanie binarne → <strong>logarytmiczna O(log n)</strong> (5 pkt w 1.1).</li><li>Inne nietypowe rozwiązania:</li><li>skok co <code>sqrt(n)</code> (jump search) → O(√n).</li><li>rekurencyjne dzielenie połowiczne → O(log n) (równoważne binary search).</li></ul>\n<h4>Reference informatyczny - klasy złożoności</h4>\n<blockquote>Reference - Złożoność asymptotyczna:<br>- <strong>O(1)</strong> - stała (np. dostęp do elementu tablicy).<br>- <strong>O(log n)</strong> - logarytmiczna (binarka, wysokość zbalansowanego BST).<br>- <strong>O(n)</strong> - liniowa (przegląd tablicy, sumowanie).<br>- <strong>O(n log n)</strong> - quasi-liniowa (mergesort, heapsort, quicksort średni).<br>- <strong>O(n²)</strong> - kwadratowa (bubble, insertion, selection sort).<br>- <strong>O(2ⁿ)</strong> - wykładnicza (rekurencyjny Fibonacci bez memoizacji).<br><br>Reguły uproszczeń:<br>- Stałe się pomija: <code>5n + 100</code> → <code>O(n)</code>.<br>- Suma → bierzemy największy człon: <code>O(n²) + O(n)</code> → <code>O(n²)</code>.<br>- Iloczyn pętli zagnieżdżonych → mnoży się: <code>O(n)·O(log n)</code> → <code>O(n log n)</code>.</blockquote>\n<h4>Schemat oceniania CKE</h4>\n<blockquote>Klucz CKE (zadanie 1.2, max 1 pkt):<br>- <strong>1 pkt</strong> - poprawna odpowiedź zgodna z algorytmem z 1.1<br>- <strong>0 pkt</strong> - błędna lub brak</blockquote>\n<p><strong>Akceptowane:</strong> <code>O(log n)</code>, <code>logarytmiczna</code>, <code>log(n)</code>, <code>log₂(n)</code> - wszystkie równoważne.<br><strong>Dla rozwiązania liniowego z 1.1:</strong> <code>O(n)</code>, <code>liniowa</code>.</p>\n<h4>Typowe pułapki</h4>\n<ul><li><strong>Pomylenie z poziomem pętli</strong> - jedna pętla nie oznacza automatycznie O(n). Trzeba przeanalizować, <strong>o ile</strong> kurczy się przestrzeń w każdej iteracji.</li><li><strong>Niezgodność odpowiedzi z algorytmem 1.1</strong> - jeśli w 1.1 napisałeś binarkę, ale w 1.2 piszesz &quot;liniowa&quot; - zero punktów.</li><li><strong>Mylenie log₂(n) z log₁₀(n)</strong> - w informatyce logarytm domyślnie o podstawie 2 (lub e - nie ma znaczenia dla notacji O).</li><li><strong>Pisanie tylko <code>O(log)</code> bez <code>n</code></strong> - to formalnie niepoprawne.</li></ul>\n<h4>Złożoność obliczeniowa</h4>\n<p>Algorytm wyszukiwania binarnego:</p>\n<ul><li><strong>Czas: O(log n)</strong> - pętla wykonuje co najwyżej ⌈log₂ n⌉ iteracji, każda w czasie O(1).</li><li><strong>Pamięć: O(1)</strong> - stała liczba zmiennych pomocniczych.</li></ul>"}]}