В моем последнем проекте я обнаружил, что перебираю множество массивов или списков строк, чтобы найти определенную строку внутри.Эффективный способ перебора массива для определенного члена
Я должен спросить, есть ли способ меньше, чем O(n)
, чтобы найти конкретный элемент внутри массива?
O(n)
решение в C# (рассмотреть нет дубликатов):
foreach(string st in Arr)
{
if (st=="Hello")
{
Console.WriteLine("Hey!");
break;
}
}
EDIT: Я не задавал мой вопрос совсем верно. Я хочу изменить члена, которого я хочу найти, и не только искать его. Так что мой сниппет меняется:
foreach(string st in Arr)
{
if (st=="Hello")
{
st="Changed";
break;
}
}
Можете ли вы как-то добраться до O(logn)
? Если да, можете ли вы объяснить, как это делается и как оно более эффективно, чем мое решение. Спасибо за любой свет в этом отношении!
Вы собираетесь сделать это один раз или много раз? Для одного доступа к массиву или списка O (n) является вашим лучшим, но если вы делаете это много раз, вам может быть лучше помещать их в другую структуру (например, сначала сортировать их, помещать в HashSet и т. Д. – Chris
You может использовать ['SortedList'] (https://msdn.microsoft.com/en-us/library/system.collections.sortedlist (v = vs.110) .aspx) – Itay
Я не уверен, что порядок операций но, возможно, используя что-то вроде «Arr.Find» (x => x == «Hey»), 'может быть более эффективным. Я не уверен, как LINQ обрабатывает поиск через массив. – Melvin