Algorithm Design Strategies

(アルゴリズムの設計方法)

Data Structures and Algorithms

13th lecture, December 22, 2016

http://www.sw.it.aoyama.ac.jp/2016/DA/lecture13.html

Martin J. Dürst

AGU

© 2009-16 Martin J. Dürst 青山学院大学

Today's Schedule

 

Remaining Schedule

 

Term Final Exam

Coverage:
Complete contents of lecture and handouts
No need to be able to write Ruby code, but need to be able to understand it, and to write your own pseudocode
Type of problems:
Similar to problems in Discrete Mathematics I or Computer Practice I
Past exams: 2008, 2009, 2010, 2011, 2012, 2013, 2014
How to view example solutions:
Use Opera 12.17 (Windows/Mac/Linux)
For Google Chrome, install Style Chooser
For Firefox, install Context Style Switcher
Select solutions style (e.g. View → Style → solutions)
Some images and example solutions are missing
Important points:
Read problems carefully (distinguish between calculation, proof, explanation,...)
Be able to explain concepts in your own words
Combine and apply knowledge from different lectures
Write clearly
Answers can be in Japanese or English

 

Algorithm Design Strategies/Methods

  

The Knapsack Problem

Depending on the details of the problem, the best algorithm design strategy is different

 

Variations of the Knapsack Problem

  1. All items are the same; how many items fit in?
  2. Pack as many items as possible
  3. Use as much capacity as possible (integer version)
  4. Maximise value

 

All Items are the Same

Example: Capacity c = 20kg, weight per item: 3.5kg

'Algorithm': Divide the capacity by the weight per item, round down

Answer for example: 5 items

Design strategy: simplistic "algorithm"

 

Simplistic Algorithm

 

Pack as Many Items as Possible

Example: Capacity c = 20kg, weight of items: 8kg, 2kg, 4kg, 7kg, 2kg, 1kg, 5kg, 12kg

Algorithm: Sort items by increasing weight, pack starting from lightest item

Answer for example: 5 items (e.g. 1kg, 2kg, 2kg, 4kg, 5kg)

Design strategy: Greedy algorithm

 

Greedy Algorithm

 

Use as Much Capacity as Possible (Integer Version)

Example: Capacity c = 20kg, weight of items: 8kg, 2kg, 4kg, 7kg, 2kg, 1kg, 5kg, 12kg

Algorithm: Consider subproblems with capacity c'c and items s1,..., sk (kn) (complexity: O(cn))

Answer for example: 8kg, 2kg, 4kg, 1kg, 5kg (total: 20kg; other solutions possible)

Design strategy: Dynamic programming

max_weight(0, ...) = max_weight(x, {}) = 0

max_weight(c1, {s1,..., sk}) = max(max_weight(c1- sk, {s1,..., sk-1})+sk, max_weight(c1, {s1,..., sk-1}))

 

Value Maximization

Example: Capacity c = 20kg, weight of items: 8kg, 500¥; 2kg, 2000¥; 4kg, 235¥; 7kg, 700¥; 2kg, 400¥; 1kg, 1¥; 5kg, 450¥; 12kg, 650¥

Algorithm: Try all possible solutions

Design strategy: Brute force

Implementation: Dknapsack.rb (of various algorithms, only brute force finds optimal solution)

 

Variations of the Knapsack Problem (Summary)

  1. All items are the same; how many items fit in?
    Solution: Divide capacity by item weight
    Design strategy: Simplistic 'algorithm'
  2. Pack as many items as possible
    Solution: Start with lightest items
    Design strategy: Greedy algorithm
  3. Use as much capacity as possible (integer version)
    Solution: Consider subproblems with capacity c'c and items s1,..., sk (kn)
    Design Strategy: Dynamic programming
  4. Maximise value
    Design Strategy: Brute force

 

Algorithm Design Strategies

Goal for Remaining Time

Example Problem 1: 3-SAT

  

Example Problem 2: Independent Set

 

Example Problem 3: Traveling Salesman

 

Homework

(no need to submit)

 

Glossary

NP-completeness
NP-完全性
reducibility
帰着可能性
approximation algorithms
近似アルゴリズム
brute force
総当たり方、腕力法、虱潰し
greedy algorithm
貪欲アルゴリズム
knapsack problem
ナップサック問題
capacity
容量
closed formula
「閉じた式」
number sequence
数列
independent set
独立集合
conflict
競合
traveling salesman
巡回セールスマン