2011-02-08 11 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は:(xを2番目の位置に加え、4番目の位置にyを加え、4番目の位置にQを移動させます)。しかし、私のベースリストが(w、p、r、g、h)になる可能性があり、同じxmlファイルを使用する必要があります(xを2番目の位置に加え、4番目の位置にyを加え、4番目の位置にQを移動します)新しい要素が予想される位置に追加されるようにします。いくつかの項目(Qのような)がベースリストにないがxmlにある場合、そのXMLノードを無視する必要があります。

+0

リストは膨大であり、実際には大きいので保存したくありません。しかし、すべての変更を保存する必要があります。 * XML *を使用します。それを小さくするのに役立つとは思わない。 –

+0

どのくらいですか? –

+0

ありがとうございます。私はデータベースにファイルを格納できません。リストが巨大であるだけでなく、元のリストが変更される可能性があります。例えば、ベースリストは(p、q、r)である。そしてxmlは:(xを2番目の位置に加え、4番目の位置にyを加え、4番目の位置にQを移動させます)。しかし、私のベースリストが(w、p、r、g、h)になる可能性があり、同じxmlファイルを使用する必要があります(xを2番目の位置に加え、4番目の位置にyを加え、4番目の位置にQを移動します)新しい要素が予想される位置に追加されるようにします。いくつかの項目(Qのような)がベースリストにないがxmlにある場合、そのXMLノードを無視する必要があります。 – needhelpwithalgo

答えて

1

アルゴリズムの問​​題は解決しませんが、データベースにリストを保存できますか?非常に使いやすいSQLiteなどのファイルベースのDBMSを使用できます。

あなたが記述している操作は、単純なSQL文で簡単に行うことができます。

編集:MySQLがSQLiteに変更されました

+0

ご回答ありがとうございますが、ファイルをデータベースに保存することはできません。元のリストが変更される可能性があります。例えば、ベースリストは(p、q、r)である。そしてxmlは:(xを2番目の位置に加え、4番目の位置にyを加える)。しかし、私のベースリストが(w、p、r、g、h)になる可能性があり、同じxmlファイルを使用する必要があります(xを2番目の位置に加え、4番目の位置にyを加え、4番目の位置にQを移動します)新しい要素が予想される位置に追加されるようにします。いくつかの項目(Qのような)がベースリストにないがxmlにある場合、そのXMLノードを無視する必要があります。 – needhelpwithalgo

+1

MySQLをインストールして管理する必要がある場合、MySQLは使いやすいとは言いません。このような簡単なリストの場合、gdbやSQLiteのようなものを使う方が良いでしょう。どちらも自己完結型であり、サーバープロセスを必要としません。 –

+0

ああ、私の謝罪。 SQLiteは私が考えていたものです。 –

関連する問題