13
CEG 221 Lesson 7: Algorithm Development From Start to Finish Mr. David Lippa

CEG 221 Lesson 7: Algorithm Development From Start to Finish Mr. David Lippa

Embed Size (px)

Citation preview

Page 1: CEG 221 Lesson 7: Algorithm Development From Start to Finish Mr. David Lippa

CEG 221Lesson 7: Algorithm Development

From Start to Finish

Mr. David Lippa

Page 2: CEG 221 Lesson 7: Algorithm Development From Start to Finish Mr. David Lippa

Overview

• Algorithm Development : Stable Marriage– What is the Stable Marriage Algorithm?

• Data Structure Development– struct PersonType

• Function Development– Populating people from a file

• Putting It Together

• Questions

Page 3: CEG 221 Lesson 7: Algorithm Development From Start to Finish Mr. David Lippa

Stable Marriage Algorithm

• Assume Equal Numbers of Men & Women

• One gender proposes, the other accepts/rejects proposals and can dump their current intended.– Each follow rules of engagement (ha ha)

• The overall algorithm:– While there are still unengaged people, go

through a round of match-making

Page 4: CEG 221 Lesson 7: Algorithm Development From Start to Finish Mr. David Lippa

Stable Marriage:Rules of Engagement

Men (Proposer)• Unengaged propose• Dumped go to next on

preference list

Women (Proposee)• Unengaged accept• Engaged and …

– Like current better tell suitor to buzz off

– Like new one better dump fiancé for the new guy

Page 5: CEG 221 Lesson 7: Algorithm Development From Start to Finish Mr. David Lippa

Overall Algorithm

// define data structures// make people// build preference listswhile(someoneIsNotEngaged){for each unengaged man{

propose to next on preference list}

}// display results

Page 6: CEG 221 Lesson 7: Algorithm Development From Start to Finish Mr. David Lippa

Define a Person

// define NAME_SIZE, NUM_PPL

struct PersonType{

char mName[NAME_SIZE];struct PersonType* mpSpouse;struct PersonType*

mpPreferences[NUM_PPL];unsigned int mPreferred;

int mHash;};

/* the hash value will be used in populating

each person’s preference list */

Page 7: CEG 221 Lesson 7: Algorithm Development From Start to Finish Mr. David Lippa

Load People

• We need to get their preference list from the user.

• In this case, we will be using fprintf / fscanf, and instead of getting input or writing output from/to the terminal, we will be getting it from a file.

• So let’s define the file

Page 8: CEG 221 Lesson 7: Algorithm Development From Start to Finish Mr. David Lippa

Define Persons.txt

• Defined to be a list of people

• Then each person and his/her preference list

• Do this twice – one for men and for women

Page 9: CEG 221 Lesson 7: Algorithm Development From Start to Finish Mr. David Lippa

Make Persons.txt

5 Austin David Jon Ichabod Manuel

5 Anna Bertha Jamie Katherine Michelle

Austin Michelle Katherine Bertha Anna Jamie

David Katherine Jamie Bertha Anna Michelle

Jon Jamie Anna Michelle Katherine Bertha

Ichabod Jamie Anna Michelle Katherine Bertha

Manuel Katherine Michelle Anna Bertha Jamie

Anna David Jon Ichabod Manuel Austin

Bertha Jon David Austin Manuel Ichabod

Jamie Manuel Ichabod Jon Austin David

Katherine David Austin Manuel Ichabod Jon

Michelle Manuel Jon Ichabod Austin David

Page 10: CEG 221 Lesson 7: Algorithm Development From Start to Finish Mr. David Lippa

What else do we need?

• Finds a person by name

• If it doesn’t exist, it returns NULL

• Prototype:struct PersonType* find(struct PersonType*[],

char* name);

• We won’t implement this function – assume that it works

Page 11: CEG 221 Lesson 7: Algorithm Development From Start to Finish Mr. David Lippa

Loader Pseudo Code1) Read first line

int num = how many to readEach string is a person’s name, add them to the array of

structures2) Do (1) one more time3) For (i = 0; i < num; i++)

read namefind name in the list of pointersfor (j = 0; j < num; j++)

Read next person on preference listFind the person pointerAdd person to name’s preference list

4) Do (3) one more time

Page 12: CEG 221 Lesson 7: Algorithm Development From Start to Finish Mr. David Lippa
Page 13: CEG 221 Lesson 7: Algorithm Development From Start to Finish Mr. David Lippa

Questions?