次の関数を検討してください。
import Data.List (find)
findInLists items = map $ find (`elem` items)
次の結果でそのように呼び出すことができます:
findInLists [2,3] [[1,2], [1,3,2], [4, -2, 8]] -> [Just 2, Just 3, Nothing]
最初の引数はソートされていると想定できますが、2 番目の引数はソートされません。
検索するすべてのリスト内n
のアイテムの総数 (この特定のケースでは、アイテムが見つかると検索が停止するため、7) であり、 が検索するアイテムk
の数である場合、この関数の実行時間は次のようになると思いますO(n * k)
. k
しかし、これも大きいとダメですn
。
O(n * log k) + O(k * log k)
可能であれば、ランタイムをもっと似たものにしたいです。これを行う最善の方法は何ですか?