나는 링크 된 목록, 배열 및 상수 메모리 사용을 기반으로 데이터 구조를 만들 필요가 있습니다. M> N되도록 N과 M.O (1) 런타임에서 가장 낮은 수 찾기 - java
N은 디스크상의 키의 최대 용량을 나타내고, M은 컴퓨터 하드 드라이브는 최대를 나타낸다 : 입력으로서
나는 두 숫자를 얻는다. 삽입 -- 삽입 (데이터) :
그래서 난 디스크 - 온 - 키 하드 드라이브에서 '이동'정보, 그 프로그램은 다음과 같은 방법을 구현하는 데 필요한 프로그램을 작성해야 디스크 - 온 - 키에 데이터, 만약 그것의 전체가 가장 중요한 데이터 (*) 제거 : 최악의 경우 실행 시간 O (1).
- 삭제 (데이터) - (1)
(*) 사용자가 파일의 중요성을 변경할 수 있습니다 O - 디스크 - 온 - 키에서 주어진 데이터를 삭제합니다. 나는이 배열 [1 ... M] 것 '보류'컴퓨터 데이터를 생성 한
: 메모리 사용의
최대 금액은 지금까지 무슨 짓 (M)
O입니다 필자는 디스크 온 키 데이터를 보관할 이중 연결 목록을 만들었습니다. [생각은 : 데이터가 디스크 온 키에 추가 될 때마다 링크 된 목록에 추가 될 것이므로 배열을 색인 (/ 키) 저장소로 사용하여 데이터로 직접 이동할 수 있습니다.]
내 컴퓨터 데이터 필드 :
node firstNode;
node currentNode;
node[] dataCollection; // Will hold computer hard-drive data
그래서 내가 [그래서 난 삽입에 사용 할 수 있습니다] 추가 할 데이터가 가장 중요한 데이터를 교체하는 방법을 창조하고 싶었다, 내 코드 교체를 위해 :
를public void replace(int leastImportantdata, int insertData){
node leastImportant = dataCollection[leastImportantdata];
if (leastImportant.prev!=null) leastImportant.prev.next=dataCollection[insertData-1];
if (leastImportant.next!=null) leastImportant.next.prev=dataCollection[insertData-1];
numOfReplacements++;
따라서 가장 중요한 문제는 두 가지 '결합 된'데이터 구조와 st O (1)의 런타임 유지, 특히 사용자가 파일 중요도를 변경하기로 결정한 경우
- 우리가 {4,3,2,1} (숫자는 중요도를 나타냄)로 시작한다고 가정하면 가장 중요한 데이터는 1이됩니다. 갑자기 사용자가 최종 파일 중요도를 5로 변경하기로 결정하면 { 4,3,2,5}이고 가장 중요하지 않은 데이터는 2입니다.
어떤 아이디어가 있습니까?
"중요도"의 범위는 무엇입니까? 즉, 데이텀에 할당 할 수있는 가장 높은 중요도와 가장 낮은 중요도는 무엇입니까? – RBarryYoung
O (log N)이 거의 확실하고 적절하게 작동하는 것이 사실상 불가능할 때 O (1)이 필요한 이유는 무엇입니까? –
그가 자신의 디자인에 더 많은 관심을 기울 였다면이 질문은 필요하지 않을 수도 있습니다. SkipList를 사용하면이 문제에 대해 매우 간단하고 깨끗한 솔루션을 생성 할 수 있습니다. –