Upload
dwight-anderson
View
213
Download
1
Embed Size (px)
Citation preview
CEG 221Lesson 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
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
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
Overall Algorithm
// define data structures// make people// build preference listswhile(someoneIsNotEngaged){for each unengaged man{
propose to next on preference list}
}// display results
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 */
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
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
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
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
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
Questions?