Algorithm Design Strategies

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

Data Structures and Algorithms

13th lecture, December 10, 2015

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

Martin J. Dürst

AGU

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

Today's Schedule

 

Remaining Schedule

 

Term Final Exam: Coverage

試験範囲/exam coverage:
授業・プリント・プログラムの全ての内容
Contents of all lectures/handouts/programs
プログラムそのものは書く必要がないが、プログラムを理解する、そして自分の議事コードを書ける必要はある
No need to be able to write Ruby code, but need to be able to understand it, and to write your own pseudocode
問題の種類/types of problem:
情報数学 I や計算機実習 I と類似
Similar to problems in Discrete Mathematics I or Computer Practice I

 

Term Final Exam: Past Exams

2008年度2009年度2010年度2011年度2012年度2013年度2014年度
図と解答例の一部は不足
解答例の表示のために、
Opera 12.17 (Windows/Mac/Linux)、
Google Chrome + Style Chooser 又は
Firefox + Context Style Switcher を使用
「表示」→「スタイル」→「solutions」で表示
Use one of the above browsers (with add-ons) and switch to 'solution' style to check solutions

 

Term Final Exam: Important

 

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.5㎏

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

Answer for example: 5 items

Design strategy: simple "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 (1kg, 2kg, 2kg, 4kg, 5kg, 7kg, 8kg, 12kg), 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

 

Value Maximization

Example: 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
巡回セールスマン