add()를 호출하여 배열이 임의의 빈 위치에 채워지는 데이터 구조를 만들려고합니다. 위치가 채워지면 다른 add()로 덮어 쓸 수 없습니다. remove (i)를 호출하면 A [i]의 위치가 해제됩니다. add() 및 remove() 호출은 섞일 수 있습니다.무작위로 배열 채우기
제 생각에는 add()가 호출 될 때마다 임의로 0과 n-1 사이의 숫자를 생성하는 것이 었습니다. 비어 있으면 채 웁니다. 가득 찼 으면 빈 검색 주소가 나올 때까지 순차 검색을 수행하십시오. 그러나 두 가지 문제가 있습니다. 1) 배열이 대부분 꽉 찬 경우 O (n) 시간에 가까워집니다. 2) 무작위 선택이 균일하지 않습니다.
나의 두 번째 생각은 1에서 n-1까지 셔플을 사용하고이 순서대로 추가하는 것이지만 remove()는 지원하지 않습니다.
add() 및 remove()에 대한 지속적인 성능을 보장하는 방법을 구현할 수 있습니까?