From 6a116181576a6efdfe7ab9f0b000e4e2d0069b8d Mon Sep 17 00:00:00 2001 From: Martin Mares <mj@ucw.cz> Date: Sun, 20 Oct 2019 19:24:42 +0200 Subject: [PATCH] =?UTF-8?q?04:=20T=C5=99=C3=ADd=C4=9Bn=C3=AD=20a=20hled?= =?UTF-8?q?=C3=A1n=C3=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 04-trideni/04-trideni.tex | 74 +++++++++++++++++++++++++++++ 04-trideni/Makefile | 3 ++ 04-trideni/binarni-hledani-print.py | 12 +++++ 04-trideni/binarni-hledani-raw.py | 17 +++++++ 04-trideni/binarni-hledani.py | 21 ++++++++ 04-trideni/trideni-vyberem.py | 14 ++++++ SYLLABUS | 1 + 7 files changed, 142 insertions(+) create mode 100644 04-trideni/04-trideni.tex create mode 100644 04-trideni/Makefile create mode 100644 04-trideni/binarni-hledani-print.py create mode 100644 04-trideni/binarni-hledani-raw.py create mode 100755 04-trideni/binarni-hledani.py create mode 100755 04-trideni/trideni-vyberem.py diff --git a/04-trideni/04-trideni.tex b/04-trideni/04-trideni.tex new file mode 100644 index 0000000..7abef0c --- /dev/null +++ b/04-trideni/04-trideni.tex @@ -0,0 +1,74 @@ +\documentclass{beamer} +\usepackage[utf8]{inputenc} +\usepackage[czech]{babel} +\usepackage{palatino} +\usepackage{verbatim} +\usetheme{Warsaw} +\title{Programování 1: Třídění a vyhledávání} +\author[Martin Mareš]{Martin Mareš\\\texttt{mj@ucw.cz}} +\institute{Katedra Aplikované Matematiky\\MFF UK Praha} +\date{2019} +\begin{document} +\setbeamertemplate{navigation symbols}{} +\setbeamertemplate{footline}{} +\setbeamerfont{title page}{family=\rmfamily} +\shorthandoff{"} + +\begin{frame} +\titlepage +\end{frame} + +\input ../slidemac.tex + +% ---------------------------------------------------------------------- + +\begin{frame}{Binární vyhledávání v setříděném seznamu} + +\verbatiminput{binarni-hledani-raw.py} + +\end{frame} + +% ---------------------------------------------------------------------- + +\begin{frame}{Intermezzo: Formátovací řetězce} + +\py{% +x=1\\ +y=2\\ +f"\{x\},\{y\}" +}{% +'1,2' +} + +\py{% +f"\{x:5\} \{y:05\}" +}{% +'~~~~1 00002' +} + +\py{% +z=1/3\\ +f"\{z:.6\}" +}{% +'0.333333' +} + +\py{% +f"\{1/3\}" +}{% +'0.3333333333333333' +} + +\end{frame} + +% ---------------------------------------------------------------------- + +\begin{frame}{Třídění výběrem} + +\verbatiminput{trideni-vyberem.py} + +\end{frame} + +% ---------------------------------------------------------------------- + +\end{document} diff --git a/04-trideni/Makefile b/04-trideni/Makefile new file mode 100644 index 0000000..afa399d --- /dev/null +++ b/04-trideni/Makefile @@ -0,0 +1,3 @@ +SLIDES=04-trideni.pdf + +include ../Makerules diff --git a/04-trideni/binarni-hledani-print.py b/04-trideni/binarni-hledani-print.py new file mode 100644 index 0000000..3670851 --- /dev/null +++ b/04-trideni/binarni-hledani-print.py @@ -0,0 +1,12 @@ +while l <= p: + stred = (l+p) // 2 + print(f"[{l},{p}] {kde[stred]}") + if kde[stred] == co: # Našli jsme + print(f"Nalezeno na pozici {stred}") + break + elif kde[stred] < co: + l = stred + 1 # Jdeme doprava + else: + p = stred - 1 # Jdeme doleva +else: + print("Kde nic, tu nic") diff --git a/04-trideni/binarni-hledani-raw.py b/04-trideni/binarni-hledani-raw.py new file mode 100644 index 0000000..a656a6f --- /dev/null +++ b/04-trideni/binarni-hledani-raw.py @@ -0,0 +1,17 @@ +kde = [11, 22, 33, 44, 55, 66, 77, 88] +co = int(input()) + +l = 0 # Hledáme v intervalu [l,p] +p = len(kde) - 1 + +while l <= p: + stred = (l+p) // 2 + if kde[stred] == co: # Našli jsme + print("Nalezeno na pozici", stred) + break + elif kde[stred] < co: + l = stred + 1 # Jdeme doprava + else: + p = stred - 1 # Jdeme doleva +else: + print("Kde nic, tu nic") diff --git a/04-trideni/binarni-hledani.py b/04-trideni/binarni-hledani.py new file mode 100755 index 0000000..41d118e --- /dev/null +++ b/04-trideni/binarni-hledani.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python3 +# Binární vyhledávání v setříděném seznamu + +kde = [11, 22, 33, 44, 55, 66, 77, 88] +co = int(input()) + +# Hledané číslo se nachazí v intervalu [l, p] +l = 0 +p = len(kde) - 1 + +while l <= p: + stred = (l+p) // 2 + if kde[stred] == co: # Našli jsme + print("Nalezeno na pozici", stred) + break + elif kde[stred] < co: + l = stred + 1 # Jdeme doprava + else: + p = stred - 1 # Jdeme doleva +else: + print("Kde nic, tu nic") diff --git a/04-trideni/trideni-vyberem.py b/04-trideni/trideni-vyberem.py new file mode 100755 index 0000000..6fb5134 --- /dev/null +++ b/04-trideni/trideni-vyberem.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python3 +# Třídění opakovaným výběrem minima + +x = [31, 41, 59, 26, 53, 58, 97] + +n = len(x) +for i in range(n): + pmin = i + for j in range(i+1, n): + if x[j] < x[pmin]: + pmin = j + x[i], x[pmin] = x[pmin], x[i] + +print(x) diff --git a/SYLLABUS b/SYLLABUS index 38ff972..85aa0d8 100644 --- a/SYLLABUS +++ b/SYLLABUS @@ -62,6 +62,7 @@ Značení: - řezy - list comprehension - stringy +- formátování # slévání setříděných posloupností ## Datové struktury (1) -- GitLab