1、問題具象:
有選手集合p=。每個選手有乙個或多個技能。所有技能集合s=。要求:選出最佳選手集合,包含所有技能,人員集合c。
2、解決方案:集合覆蓋法(貪心法思路,不一定是最優解)
(1)選出有最多技能的人員amax
(2)s中去掉amax中的技能;p中去掉amax
(3)迴圈找出下乙個相對amax,直到s中技能為0。
3、資料結構
#ifndef _cover_h
#define _cover_h
#include "set.h"
//每個人是乙個節點 data指向kset
typedef struct _listelmt
listelmt;
//listelmt:每個節點對應乙個人,也用來set中的每個技能,data指向kset
//kset:key對應乙個人的標記,set指向每個人的技能集合
typedef struct _kset
kset;
#endif
4、實現
#include
#include "single_list.h"
#include "cover.h"
//skills是技能集合s, people是選手集合 p, repeople返回的 包含所有技能,人員集合c
int cover(set *skills, set *people, set *repeople)
}//把找到的人暫存入pset,再存入集合repeople
pset = (kset *)
list_data
(max_member);
set_insert
(repeople, pset);
//移掉已入組的人員
set_remove
(people, (void **)&pset);
//技能集合中去掉已經拿掉的人的技能
for(member = list_head( &((kset *)list_data(max_member))->set);member != null;member=list_next(member))
//set_remove已經減了不需要sset->size = sset->size - max_size;
//pset->size--;
return
0; }
}
Python自娛 8 集合
集合是可變資料型別 它裡邊的元素必須是不可變資料型別 set就是不存value的字典,只存key set中的元素是不能重複的,無序的,可雜湊的 因為無序,所以沒有索引 雜湊的特點就是雜湊,所以set內部是無序的 建立集合的方式set set set set set set 增刪改查set.add 正...
演算法 集合覆蓋問題
假設你辦了個廣播節目,要讓全美50個州的聽眾都收聽得到,為此,你需要決定在哪些廣播台播出。這是乙個貪婪演算法問題,隨著廣播台的數量增加,計算時間將會 所以用近似演算法來解。states needed set mt wa or id nv ut ca az stations stations kone...
java8 集合操作
1.實體類要實現comparable介面public class industryinfo implements comparable get set 省略 2.按照num逆序排列listlistre list.stream sorted comparator.comparing industryi...