演算法精解 8 集合應用 集合覆蓋問題

2021-08-04 22:53:17 字數 1239 閱讀 3832

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