def purge                (self,
	                          strategy           = "klogn",
	                          keep               = None,
	                          deleteNonSnapshots = False,
	                          **kwargs):
		"""Purge snapshot directory of snapshots according to some strategy,
		preserving however a given "keep" list or set of snapshot numbers.
		
		Available strategies are:
		    "lastk":  Keep last k snapshots (Default: k=10)
		    "klogn":  Keep every snapshot in the last k, 2k snapshots in
		              the last k**2, 3k snapshots in the last k**3, ...
		              (Default: k=4. k must be > 1).
		
		Returns `self`."""
		
		assert(isinstance(keep, (list, set))  or  keep is None)
		keep = set(keep or [])
		if self.haveSnapshots:
			if   strategy == "lastk":
				keep.update(self.strategyLastK(self.latestSnapshotNum, **kwargs))
			elif strategy == "klogn":
				keep.update(self.strategyKLogN(self.latestSnapshotNum, **kwargs))
			else:
				raise ValueError("Unknown purge strategy "+str(None)+"!")
			keep.update(["latest", str(self.latestSnapshotNum)])
		keep = set(map(str, keep))
		
		snaps, nonSnaps    = self.listSnapshotDir(self.snapDir)
		dirEntriesToDelete = set()
		dirEntriesToDelete.update(snaps)
		dirEntriesToDelete.update(nonSnaps if deleteNonSnapshots else set())
		dirEntriesToDelete.difference_update(keep)
		for dirEntry in dirEntriesToDelete:
			self.rmR(os.path.join(self.snapDir, dirEntry))
		
		return self