Docsity
Docsity

Prepare for your exams
Prepare for your exams

Study with the several resources on Docsity


Earn points to download
Earn points to download

Earn points by helping other students or get them with a premium plan


Guidelines and tips
Guidelines and tips

Brute Force Algorithms: Push Button Lock and Zipper Problem Solutions, Study notes of Algorithms and Programming

The solutions to the push button lock and zipper problem using brute force algorithms. The push button lock problem involves finding all possible combinations of buttons, while the zipper problem deals with matching characters in three strings. The code for generating all possible combinations and checking their validity, as well as an alternative solution for the push button lock problem using dynamic programming.

Typology: Study notes

Pre 2010

Uploaded on 08/18/2009

koofers-user-z5x
koofers-user-z5x 🇺🇸

5

(3)

10 documents

1 / 3

Toggle sidebar

Related documents


Partial preview of the text

Download Brute Force Algorithms: Push Button Lock and Zipper Problem Solutions and more Study notes Algorithms and Programming in PDF only on Docsity! COMP157 Fall 2007 brute force examples Sept. 17 Brute force solution to Push Button Lock: A Test is one possible assignment of buttons  combinations: Recursively build all possible button  combination assignments (including invalid ones). Check if a button  combination assignment is valid: struct Test { int x[11]; int n; Test(int _n) { n = _n; } Test(const Test& o) { n=o.n; for (int i=0; i<o.n; i++) x[i]=o.x[i]; } }; void make_tests(int n, int max, vector<Test>& v) { if (n==1) { for (int j=0; j<=max; j++) { Test t(1); t.x[0] = j; v.push_back(t); } return; } vector<Test> v2; make_tests(n-1,max,v2); for (unsigned int i=0; i<v2.size(); i++) { Test copy(v2[i]); copy.n++; for (int j=0; j<=max; j++) { copy.x[n-1]=j; v.push_back(copy); } } } bool checkTest(Test& test) { int combos[11]; int n = 0; int i; for (i=0; i<test.n; i++) if (test.x[i]<test.n) { combos[n] = test.x[i]; n++; } sort(combos, n); if (combos[0] != 0) return false; for (i=0; i<n-1; i++) if ((combos[i+1]-combos[i])>1) return false; return true; } COMP157 Fall 2007 brute force examples Sept. 17 Solve the problem for a specific number of buttons: Official judge’s solution to Push Button Lock (not brute force?): int solve(int num_buttons) { // make vector containing all possible assignments vector<Test> v; make_tests(num_buttons, num_buttons, v); // count the number of valid assignments int count = 0; for (unsigned int i=0; i<v.size(); i++) if (checkTest(v[i])) count++; return count; } unsigned int max_move = 0; int savemove[16384]; unsigned long count(unsigned int used) { unsigned int move; unsigned int nMove = 0; if(savemove[used] > 0){ return(savemove[used]); } for (move = 1; move < max_move; move++) { if (move & used) { continue; } nMove++; nMove += count(used | move); } savemove[used] = nMove; return(nMove); } int solve(int num_buttons) { max_move = 1<<num_buttons; // 2^n ::memset(&(savemove[0]), '\0', sizeof(savemove)); return count(0); }
Docsity logo



Copyright © 2024 Ladybird Srl - Via Leonardo da Vinci 16, 10126, Torino, Italy - VAT 10816460017 - All rights reserved