Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
laborator [2020/09/08 10:12]
pdmatei
laborator [2020/09/10 17:57] (current)
pdmatei
Line 1: Line 1:
 ====== Laborator AA ====== ====== Laborator AA ======
  
-==== Masina Turing ​====+===== Part 1 - Decidability - 4 labs =====
  
-  * Exercitii simple cu MT +==== 1. Turing Machine ====
-  * Exercitii cu MTU si conceptul de simulare +
-  * Algoritmi+
  
-==== Decidabilitate ​====+Key concepts: 
 +  - computation (the output of the tape) and acceptance (acceptare);​ 
 +  - mechanical description of an algorithm 
 + 
 +  - (Answers online - discussion) A **Turing Machine** consists of: 
 +    * an **alphabet** $math[\Sigma] 
 +    * a set of **states** $math[K] 
 +    * an **initial** state $math[q_0] 
 +    * a **transition function** $math[\delta : K \times \Sigma \rightarrow K \times \Sigma \times \{L,​H,​R\}] 
 +    * a set of **final** states $math[F \subseteq K] 
 + 
 +Which of the following components of an **assembly language** would best correspond to the above? $math[K,​\Sigma,​ \delta, q_0, F] 
 +  * the processor 
 +  * the memory 
 +  * registers 
 +  * assembly instructions 
 + 
 +  - (Answers online) What does the following TM do? (**bitwise complement**) 
 +  - (Answers online) Write a TM which **accepts** only if the **input** is a binary encoding of a **even** natural number. 
 +  - (Answers online) Write a TM which adds **5** to a number encoded in binary on the tape. The machine will always accept. 
 +  - (Answers online) Check if a symbol is present on the tape. 
 +  - (Discussion) How would the following algorithm be represented as a Turing Machine: 
 +<​code>​ 
 +Algorithm(vector V, integer M) { 
 +   ​integer s 
 +   ​for-each x in V 
 +      s +
 +   if (x > 1000) 
 +   ​then ​ return 1 
 +   ​else ​ return 0 
 +
 +</​code>​ 
 +Helpful questions:​ 
 +  * how should the tape be organised?​ 
 +  * when should the machine accept? 
 +  * how would ''​foreach x in V''​ be implemented?​ 
 +  * how would ''​s +x''​ be implemented?​ 
 +  * how would ''​if (x > 1000) then ... else ...''​ be implemented ? 
 + 
 +Homework: 
 +  * Write a TM which verifies if a string has the **same number** of ones and zeroes. Give hints - live (what should the machine do?) 
 +  * write a TM which **accepts** a given regular expression 
 +  * write a TM which **reverses** a given binary string (always accepts) 
 + 
 +  
 +==== 2. Turing Machines and Solvability ==== 
 + 
 +Key concepts:  
 +  * **acceptance** vs **decision** 
 +  * complement of a problem. 
 + 
 +  * Can the following problem be **accepted** by a TM? (f(x) = 0)  
 +    * What is the complement of this problem? 
 +  * Can a problem be accepted by two different TMs? Can a TM accept two different problems? 
 +  * If a problem is accepted by some TM, can its complement also be accepted? 
 +  * If a problem is **decided** by some TM, can its complement also be decided?  
 +  * Write a TM which accepts //is-odd// problem but which does not decide it. 
 +  * Which of the following problems you **think** can be **accepted** and which can be **decided**?​ Use pseudocode instead of writing a TM. 
 +      * a) V [[https://​arxiv.org/​pdf/​1902.10188.pdf | Undecidable example 1]] 
 +      * b) V [[https://​en.wikipedia.org/​wiki/​Hilbert%27s_tenth_problem | Hilbert undecidable ]] 
 +      * c) V [[https://​en.wikipedia.org/​wiki/​Wang_tile | Wang Tile]] 
 +      * e) k-color 
 +      * f) Linear Integer Programming 
 + 
 +==== 3. The Universal Turing Machine ==== 
 + 
 +Key concepts:  
 +  * simulation 
 + 
 +Exercises:​ 
 +  * The Von Newmann architecture - explained. 
 +  * Which of the components of Von Newmann arch. corresponds best to the TM? 
 +  * Write a TM pseudocode which verifies if a word is the proper encoding of a TM. 
 +    Discussion on the pseudocode. 
 +  * Write a TM pseudocode which accepts if **there exists** a word which is accepted by a given TM in **k steps**. 
 +    Discussion on the pseudocode 
 +  * Which of the following is a suitable pseudocode for a TM: 
 +<​code>​ 
 +Algoritm(M,​w){ 
 +   if size(w) > 10 
 +     then if M halts for w in k steps 
 +          accept. 
 +}  
 +</​code>​ 
 +<​code>​ 
 +Algoritm(M1,​M2,​w){ 
 +   k = 0 
 +   while true 
 +       if M1(w) has the same behaviour as M2(w) after k steps 
 +          then accept 
 +       else k = k + 1 
 +}  
 +</​code>​ 
 +<​code>​ 
 +Algorithm(M,​A) { 
 +   // A is a finite set of words 
 +   for each w in A 
 +       if M(w) halts  //​undecidable! Pseudocode is ok, but this machine may not terminate 
 +          then accept 
 +
 +</​code>​ 
 +<​code>​ 
 +Algorithm(M,​w) { 
 +   build the machine M' such that M(x) accepts iff M'(x) does not accept, for all words x 
 +   if M'(w) in 1000 steps 
 +      accept 
 +
 +</​code>​ 
 +<​code>​ 
 +Algorithm(M1,​M2) { 
 +    if M1 always halts then     //we know of no procedure, terminating or not, which can achieve this. This is not a proper TM/​algorithm. 
 +       if M2 always halts then  
 +          accept 
 +
 +</​code>​ 
 + 
 +  * Write the problem which is accepted by each of the above machines. 
 +  * Write a TM pseudocode which accepts if a **given** word is accepted by two given TMs. Explain the dovetailing technique. 
 + 
 +Homework: 
 +  * Write a TM pseudocode which accepts if **there exists** a word which is accepted by two given TMs. 
 +  * Write a TM pseudocode which accepts if **there exists** a TM which accepts a given word. 
 +  * Write a TM pseudocode which accepts if a given TM accepts **some** word of a given finite set A. 
 +  * Write a TM pseudocode which accepts if a given TM accepts **all** words of a given finite set A. 
 + 
 + 
 +[[https://​www.bbc.co.uk/​bitesize/​guides/​zhppfcw/​revision/​3#:​~:​text=Von%20Neumann%20architecture%20is%20the,​both%20stored%20in%20primary%20storage | Von Newmann Model]] 
 + 
 +==== 4. Undecidable problems ==== 
 + 
 +Key concept: 
 +  * reduction 
 +  * proving a problem is not in R 
 +  * proving a problem is not in RE 
 + 
 +===== Part 2 - Measuring algorithm performance (3 labs) =====
  
-  * Ce este o problema de decizie? 
-  * Problema si rezolvare; 
-  * Lista de probleme care (pot/nu pot) fi rezolvate; 
-  * Reduceri 
-  * Further work: coRE, complement, dovetailing 
  
 ==== Notatii asimptotice ==== ==== Notatii asimptotice ====
-  * Implementari care sa ilustreze faptul ca constanta conteaza/​nuconteaza +  * (Homework) Implement mergesort and insertionsort ​in python. Use a large dataset (provided by usto test your implementation. Plot the execution times together with the functions $math[n^2] and $math[n\cdot \log{n}] using ''​gnuplot''​. What do you observe? Adjust the constants for the previous functions so that the rate of growth can be better observed.
-  * Implementari care sa ilustreze faptul ca log n >> n >> n2 >>>​ n3 +
-  * Grafice ​(in ?!)+
   * Exercitii clasice   * Exercitii clasice
  
 ==== Recurente ==== ==== Recurente ====
   * Cativa algoritmi si recurentele lor   * Cativa algoritmi si recurentele lor
 +    * Merge-sort,
 +    * Quick-sort (curs)
 +    * Exemplul cu sqrt(n) al lui Sebi.
   * Exercitii clasice   * Exercitii clasice
 +
 +==== Ammortised Analysis ====
 +  * Classical exercises
 +
 +===== Part 3 - Algorithm complexity (4 labs) =====
  
 ==== NP completitudine ==== ==== NP completitudine ====
-  * Implementare care sa ilustreze exponentiala (backtracking);​ legatura cu MTN+  * Implement a SAT solver which encodes formulae as matrices and iterates over interpretations treating them as binary counters. Plot execution times
-  * Reduceri pentru ​SAT solvere +  * Implement a better ​SAT solver which uses BDDs to encode a formula. The variable ordering is known in advance. Plot execution times. 
-  * Exercitii clasice cu reduceri+  * Implement a k-Vertex-Cover solver using a reduction from SAT, and any of the above solvers. 
 +  * Exercitii clasice cu choice si reduceri 
 + 
 +===== Part 4 - Abstract Datatypes (2 labs) =====
  
 ==== TDA-uri ==== ==== TDA-uri ====
   * Conceptul de operator vs cel de functie (exercitiu in C, exercitiu in Haskell, pe Liste)   * Conceptul de operator vs cel de functie (exercitiu in C, exercitiu in Haskell, pe Liste)
 +  * (Homework) Implementare LinkedList si ArrayList in Python, impreuna cu operatii. Implementare Haskell a operatiilor,​ dupa o discutie la curs despre acestea.
   * Exercitii clasice   * Exercitii clasice