2009-05-14 8 views
1

私は何千もの画像を持つフォルダを持っています。 他のすべての画像を削除します。 これを行う最も効果的な方法は何ですか? i%2 == 0のものは、まだO(n)です。 これを行うための速い方法がありますか(好ましくはPythonで)?アルゴリズム:他のすべてのファイルを削除する方法

Thxを

+0

あなたは何を持っているのか、何を得たいのかは不明です。 *別の*すべての画像を削除しますか?何のために他の? あなたの "私%2"の "i"は一体何ですか? O(n)のnは何ですか? – akappa

+0

O(n)は時間の複雑さです... – geowa4

+0

おかげで、Mr. Obvious、あなたの素晴らしい答えです。 Nで表現されている量を知りたい。 – akappa

答えて

21

あなたはO(N)よりも速くならないでき半分N枚の画像を削除するには! は、O()表記が定数乗法因子が無関係であることを意味することを知っていますか?

+18

そこに感嘆符を注意してください...私は読むことが難しく、最初は " O(N!) "は明らかに間違っています... 1つは数学をするときに決して興奮するべきではありません。あなたは指数関数的な成長の危険を冒す。B-) –

+2

^^「数学をするときは決して興奮してはいけない」lol – wilhelmtell

2

n/2ファイルの削除は、ファイルシステムに大量のファイルを削除するための特別な機能がない限り、O(n)よりも高速である可能性があります。実際には存在しませんもし可能ならば)

1

ログ(n)ファイルを削除したいのであれば...データベースにイメージを保存することはできますが(MySQLには "blob"タイプがあります。あなたの画像を保存します)。あなたはそれらをスマートに命名すれば、あなたはO(1)でそれを行うことができます。

/edit 私はすぐに私の答えを得るために、簡略化したやり方を使わなければならないのは嫌いです!

rm -rf * 2.img * 4.img * 6.img * 8.img * 0.imgのpythonに相当するものを探しているなら、コンピュータはまだリスト全体を調べなければならないファイルのうち

3

i%2 == 0のものはまだO(n)です。これを行うための速い方法がありますか(好ましくはPythonで)?

O(n)よりも高速になる唯一の方法は、ファイルがすでにソートされていて、1つのファイルのみを削除したい場合です。

あなたはi%2 == 0と言っています。これは、すべての「均等」ファイルを削除することを意味します。 O(N/2)は依然としてO(n)が

2による増分の代わりに1ずつ増加 "%2 == 0は依然としてO(n)とIとのそれぞれを通って行く"

0

for(i = 0; i < numFiles; i += 2) { 
    deleteFile(files[i]); 
} 

真剣に:ファイルのリストを反復することは、おそらくファイルの削除の最も遅い部分ではありません。実際の削除には数桁の時間がかかります。

1

itertoolsモジュールのisliceを使用できます。ここにあなたの例があります:

import os, itertools 
dirContent = os.listdir('/some/dir/with/files') 
toBeDeleted = itertools.islice(dirContent, 0, len(dirContent), 2) 
# Now remove the files 
[os.unlink(file) for file in toBeDeleted] 

これは速くなるかどうかはわかりませんが、これは別の形で行います。お役に立てれば。

11
import os 
l = os.listdir('/some/dir/with/files') 

for n in l[::2]: 
    os.unlink(n) 
0

私のような何か特定のオペレーティング・システムを使用しようとする:

のlinux:

@files = grep { -f "$dir/$_" && /*.H$/ } 
unlink @files 

勝利:

$file_delete =~ /H$/; 
rm $file_delete 

お使いのOSが速くそれを行うことができるかどうかを確認しますPythonで反復するよりも。

これらをpythonから実行するには、os.system(...)またはsubprocess.call(...)を使用します。

+0

それでもO(n)です。 – akappa

関連する問題