2011-02-08 5 views
0

나는 거대한 목록을 가지고 있습니다. 이 목록에서 항목을 추가/재정렬/제거 할 수 있습니다. 목록이 실제로 버그이므로 전체 목록의 스냅 샷을 시스템의 어느 곳에 나 저장하고 싶지 않습니다. 대신 추가/이동 된 항목을 추적하는 XML 파일을 유지 관리합니다.효과적으로 목록을 유지합니다.

각 항목은 index and change order과 관련됩니다.
Def- Change order: 항목이 추가/이동되는 순서입니다.
Def- Index: 항목이 추가/이동되는 색인입니다.

이제 목록을 표시해야 할 때마다 원래 목록과 XML 파일을 갖게됩니다. xml 파일을 사용하고, 변경 순서에 따라 항목을 추가/이동합니다.

목록에서 항목을 이동/삭제하고 싶을 때마다 다른 항목의 색인을 변경해야합니다.

for each item in list: 
    If item's change order > removed/moved item's change order: 
     Do Item's CO = item's CO - 1 
     If item's index > removed item's index (This index is not actual index, 
               is the index where we inserted 
               /moved the item. Item's actual 
               index can be different, because 
               of the movements of other items 
               in the list) 
      Do Item's index = item's index - 1 

이 코드는 많은 경우에 실패 : 이것에 대한

나는 간단한 코드를 사용했다. 예를 들어.

원래 목록 (S, D, G, Y, U, I) 내 XML에

내 실제 목록이 후

X: (newly added) CO 1, index 5 
Giving me: (S, D, G, Y, X, U, I) 
Y: (already in list at position 4) CO 2 index 6 
Giving me: (S, D, G, X, Y, U, I) 

이 : 이제

X: pos: 4 
Y: pos: 5 

코드에 따라 X를 제거하고 싶습니다.
Y : CO 1 색인 5

원래 목록에 적용 : (S, D, G, U, Y, I)

잘못된 것입니다!

이 유형의 요구 사항에 맞는 올바른 알고리즘이 있습니까?

감사합니다 ....


나는 데이터베이스에 파일을 저장하지 못할. 원래 목록이 바뀔 수있는 가능성이 있습니다. 예를 들어. 기본리스트는 (p, q, r)이다. 그리고 xml은 : (2 번째 자리에 x를 붙이고, 4 번째 자리에 y를 더하고, 4 번째 자리로 Q를 옮깁니다). 그러나 내 기본 목록 (w, p, r, g, h)이 될 수있는 가능성이 있고 동일한 xml 파일을 사용해야합니다 (x를 두 번째 pos에 추가하고 y를 네 번째 pos에 추가하고 Q를 네 번째 pos로 이동해야합니다) 새 요소가 예상 위치에 추가됩니다. Q와 같은 일부 항목이 기본 목록에 없지만 xml에있는 경우 xml 노드를 무시해야합니다.

+0

로 변경 그래서 목록은 거대하고 정말 큰이기 때문에 당신은 그것을 저장하지 않습니다. 그러나 변경 사항을 모두 저장하고 싶습니다. * XML *. 나는 그것이 더 작은 것을 만드는 것을 도울 것이라고 생각하지 않는다. –

+0

크기가 얼마나 큽니까? –

+0

답장을 보내 주셔서 감사합니다. 데이터베이스에 파일을 저장할 수 없습니다. 목록이 거대하기 때문에뿐만 아니라. 원래 목록이 바뀔 수있는 가능성이 있습니다. 예를 들어. 기본리스트는 (p, q, r)이다. 그리고 xml은 : (2 번째 자리에 x를 붙이고, 4 번째 자리에 y를 더하고, 4 번째 자리로 Q를 옮깁니다). 그러나 내 기본 목록 (w, p, r, g, h)이 될 수있는 가능성이 있고 동일한 xml 파일을 사용해야합니다 (x를 두 번째 pos에 추가하고 y를 네 번째 pos에 추가하고 Q를 네 번째 pos로 이동해야합니다) 새 요소가 예상 위치에 추가됩니다. Q와 같은 일부 항목이 기본 목록에 없지만 xml에있는 경우 xml 노드를 무시해야합니다. – needhelpwithalgo

답변

1

알고리즘의 문제는 해결하지 않지만 데이터베이스에 목록을 저장할 수 있습니까? SQLite와 같은 파일 기반 DBMS를 사용할 수 있습니다. SQLite는 사용하기가 매우 쉽습니다.

설명하는 조작은 간단한 SQL 문으로 쉽게 수행 할 수 있습니다.

편집 : MySQL이 SQLite는

+0

답장을 보내 주셔서 감사합니다.하지만 데이터베이스에 파일을 저장할 수 없습니다. 원래 목록이 바뀔 수있는 가능성이 있습니다. 예를 들어. 기본리스트는 (p, q, r)이다. 그리고 xml은 : (x를 2 번째 포지션에 더하고, 4 번째 포지션에 y를 더함). 그러나 내 기본 목록 (w, p, r, g, h)이 될 수있는 가능성이 있고 동일한 xml 파일을 사용해야합니다 (x를 두 번째 pos에 추가하고 y를 네 번째 pos에 추가하고 Q를 네 번째 pos로 이동해야합니다) 새 요소가 예상 위치에 추가됩니다. Q와 같은 일부 항목이 기본 목록에 없지만 xml에있는 경우 xml 노드를 무시해야합니다. – needhelpwithalgo

+1

MySQL을 설치하고 관리해야한다면 MySQL을 사용하는 것이 간단하다는 말은 아닙니다. 이런 일종의 간단한 목록을 위해 gdb 나 SQLite 같은 것을 사용하는 것이 좋습니다. 둘 다 자체 포함되어 있으며 서버 프로세스가 필요하지 않습니다. –

+0

아, 제 사과. SQLite는 내가 생각하고있다. –

관련 문제