14. 집합 세트
2727 단어 SetADT알고리즘 과 데이터 구조
1. 집합 조작
Set 는 Dict 보다 더 풍부 한 조작 을 하 는데 집합 에서 가장 자주 사용 하 는 조작 은 무 게 를 제거 하고 요소 가 존재 하 는 지 판단 하 는 것 이다.
A, B 두 개의 집합 이 있다 고 가정 하면 다음 과 같은 조작 이 있 을 수 있다.
교 집합: A & B
모음 집: A | B
차 집합: A - B
대칭 차: A ^ B 즉: (A | B) - (A & B)
2.frozenset
이것 도 일종 의 집합 이다. 그의 내용 은 변동 할 수 없다. 일반적으로 흔히 볼 수 있 는 용법 은 교체 가능 한 대상 으로 그 를 초기 화 한 다음 에 중 등 조작 만 하 는 것 이다.
처음에 요소 의 수량 이 고정 되면 보통 forzenset 를 사용 하지만 가 변 적 인 대상 이 고 요 소 를 계속 추가 하면 python 에 내 장 된 set 를 사용 합 니 다.
3. set 의 추상 적 인 데이터 구 조 를 실현 한다.
""" HashTable """
#-*- coding:utf-8 -*-
class SetADT(HashTable):
"""
HashTable
"""
def add(self, key):
"""
add ,
value True
,
hash (key,value) ,
value True 。
"""
return super(SetADT, self).add(key, True)
def __and__(self, other_set): #
new_set = SetADT() #
for element_a in self: # , element_a
if element_a in other_set: # element_a
new_set.add(element_a) # element_a
return new_set #
def __sub__(self, other_set): #
new_set = SetADT()
for element_a in self:
if element_a not in other_set:
new_set.add(element_a)
return new_set
def __or__(self, other_set): #
"""
Hash ,
,
Hash ,
key 。
"""
new_set = SetADT()
for element_a in self:
new_set.add(element_a)
for element_b in other_set:
new_set.add(element_b)
return new_set
#
def test_set_adt():
sa = SetADT()
sa.add(1)
sa.add(2)
sa.add(3)
assert 1 in sa
sb = SetADT()
sb.add(3)
sb.add(4)
sb.add(5)
assert sorted(list(sa & sb)) == [3]
assert sorted(list(sa | sb)) == [1,2,3,4,5]
assert sorted(list(sa - sb)) == [1,2]
___________________분할 선
(미 완성 부분)
a. 집합 하여 하나의 요소 가 존재 하 는 지 여 부 를 판단 하 는 시간 복잡 도 는 O (1) 이다.
참고 자료:https://blog.csdn.net/baoli1008/article/details/48059623
b. SetADT 를 바탕 으로 reove 와 pop 작업 을 실현 합 니 다.
pass
c. 대칭 차 (A ^ B) 의 조작 을 실현 한다.
pass
d. 문서 조회 도구 로 python 의 set 에 관 한 문 서 를 봅 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java의 Set, List, Map 사용법 및 차이점 소개맵 역시 모든 요소에 한 부를 저장하지만, 이것은'키'를 기반으로 하고, 맵에도 내장된 정렬이 있기 때문에 요소가 추가되는 순서에 관심이 없습니다.요소를 추가하는 순서가 중요하다면 LinkedHashSet 또는 Li...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.