Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
 Аватар для Mimus
3 / 3 / 1
Регистрация: 11.08.2016
Сообщений: 37

Время поиска элемента

09.11.2016, 15:36. Показов 2879. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Почему при поиске элемента, не входящего в List, время поиска меньше, чем при его вхождении в этот самый List?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.11.2016, 15:36
Ответы с готовыми решениями:

Написать функцию поиска элемента X в двоичном дереве поиска
Написать функцию поиска элемента X в двоичном дереве поиска.

Создать программу для поиска первого нечетного элемента в заданном массиве методом бинарного поиска
Бинарный поиск Первый нечетный, помогите пожалуйста.

Выполните поиск элемента в массиве. Для поиска элемента используйте рекурсивную функцию
Выполните поиск элемента в массиве. Для поиска элемента используйте рекурсивную функцию. В случае, если элемент не найден, выдавать...

5
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18294 / 14218 / 5368
Регистрация: 17.03.2014
Сообщений: 28,897
Записей в блоге: 1
09.11.2016, 15:46
Mimus, ты уверен что правильно сделал измерения? Покажи как это ты сделал.
0
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
09.11.2016, 15:49
Mimus, если что, вот программа, противоречащая Вашему высказыванию.
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using System;
using System.Collections.Generic;
using System.Diagnostics;
 
namespace ListFind
{
    class Program
    {
        static void Main(string[] args)
        {
            var list = new List<int>();
            var rand = new Random();
            for (int i = 0; i < 100*1000*1000; ++i)
                list.Add(rand.Next(100));
 
            var sw = Stopwatch.StartNew();
            int k = list.IndexOf(55);
            sw.Stop();
            Console.WriteLine($"Index {k}: {sw.Elapsed}");
 
            sw.Restart();
            k = list.IndexOf(100);
            sw.Stop();
            Console.WriteLine($"Index {k}: {sw.Elapsed}");
        }
    }
}
0
 Аватар для Mimus
3 / 3 / 1
Регистрация: 11.08.2016
Сообщений: 37
09.11.2016, 16:02  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
11
public void Elapsed(int index)
    {
        Console.WriteLine("=========== index : {0} ==== size : {1} =============", index, _listTKey.Count);
        var time = new Stopwatch();
        time.Start();
 
        _listString.Contains(index.ToString());
        Console.WriteLine(time.Elapsed);
        time.Stop();
 
    }
_listTKey - List со string, которые до этого инициализировались номерами от 0 до N. Этот метод ищет номер среди всего листа.
Если аргумент больше чем размер листа, то время меньше, если же входит номер - время больше.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18294 / 14218 / 5368
Регистрация: 17.03.2014
Сообщений: 28,897
Записей в блоге: 1
09.11.2016, 16:52
Mimus, время работы метода Contains складывается из двух вещей - цикл и сравнение. Цикл всегда идет от начало и до первого совпадения или конца. Время работы сравнения же зависит от того что мы сравнимаем. В случае со строкой сначала сравниваются адреса а потом содержимое. Судя по всему отсюда и разница. Ты так подобрал входные данные что сравнение на неравенство отрабатывает быстрее.
0
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
09.11.2016, 17:04
Mimus, вот такой код подтверждает твои слова:
C#
1
2
3
4
5
            _listString = new List<string>();
            for (int i = 0; i < 1000 * 1000 * 10; ++i)
                _listString.Add(i.ToString());
            Elapsed(9999999);
            Elapsed(-1);
А вот такой отрицает:
C#
1
2
3
4
5
            _listString = new List<string>();
            for (int i = 0; i < 1000 * 1000 * 10; ++i)
                _listString.Add(i.ToString());
            Elapsed(999999); // тут на 1 девятку меньше
            Elapsed(-1);
Всё это потому, что сравнение строк начинается с проверки совпадения адресов, а потом идёт проверка равенства их длин и только потом посимвольное сравнение. В первом случае работает долго, потому что большинство чисел в массиве семизначные (как и число на входе Elapsed), то есть коду чаще приходится опускаться до посимвольного сравнения. А совпадение произойдёт только после сравнения с последним элементом списка.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.11.2016, 17:04
Помогаю со студенческими работами здесь

Составить программу поиска наибольшего по модулю элемента массива, а также индекса этого элемента
Помогите написать программу и составить блок схему. Дано массив А и натуральное число n. Составить программу поиска наибольшего по модулю...

В программе написать функции: вставки элемента, поиска максимального элемента, определения среднего арифметического элементов массива
В целочисленном массиве Х(N) после каждого четного числа вставить максимальный элемент массива. Найти среднее арифметическое элементов ...

Найти вероятности следующих событий: за время Т откажет хотя бы один элемент; за время Т откажут ровно 3 элемента
Система связи состоит из 1000 элементов, каждый из которых независимо от остальных выходит из строя за время Т с вероятностью 0,0005. Найти...

Время поиска по базе
Привет всем ребята есть БД там таблица в нем боле 200000 записей. При поиске например одного фамилии уходит 3-4 сек. это нормально как...

Засечь время выполнения поиска
Создается массив случайных чисел, сортируется, и затем проводится поиск по этому массиву. Для определения время сортировки использовал...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 03.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru