|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||||||||||||||||
Убрать уникальные значения в List22.01.2019, 09:52. Показов 9445. Ответов 73
Метки нет (Все метки)
есть
то есть из
Из идей была только - сначала с помощью Sort() получить упорядоченную последовательность, а потом в цикле проверять совпадение текущего элемента с предыдущим и если они совпали - обрабатывать их. Но Sort() нет для struct, поэтому пока залип на месте.
0
|
||||||||||||||||
| 22.01.2019, 09:52 | |
|
Ответы с готовыми решениями:
73
Уникальные значения столбца А по сравнению со столбцом С и уникальные значения в столбце С по сравнению с А?
Уникальные значения |
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
|||||||||||||||||
| 29.01.2019, 10:39 [ТС] | |||||||||||||||||
|
для примера, есть массив
потом
потом
Плата за скорость?
0
|
|||||||||||||||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 29.01.2019, 10:41 | ||
|
В вашем случае — при GroupBy и при ToArray. Where и SelectMany дополнительной памяти не требуют.
0
|
||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||
| 29.01.2019, 11:01 [ТС] | ||
|
берём первый элемент, создаем группу, берём второй элемент, проверяем вхождение в предыдущие группы, помещаем в существующую или создаем новую, повторяем. но у меня именно так ранее работал код и это было долго, так как каждый последующий элемент бегает по предыдущим и так много раз. так сказать "каждый с каждым" проверяется. формально по данным один проход, но фактически 1000001*50 итераций. Или я где-то ошибся?
0
|
||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 29.01.2019, 11:09 | ||
|
Алгоритм такой: 1. Берем элемент. 2. Смотрим на его хэш (мы ведь по нему группируем). 3. Если нет группы для элементов с этим хэшем, то создаем такую группу. 4. Кладем элемент в эту группу. 5. Если в исходной коллекции еще есть элементы, то goto 1. 6. На выходе получаем набор групп, в каждой из которых лежат элементы с одинаковыми хэшами. Как видите, нет необходимости проверять каждый элемент со всеми остальными — достаточно посмотреть на его хэш и бросить в соответствующую этому хэшу "корзину". Добавлено через 3 минуты Принцип тот же, которым вы руководствуетесь при сортировке колоды карт по мастям: беря карту, вы смотрите на ее масть и добавляете в соответствующую группу. Вам не нужно проверять каждую карту в этой группе на наличие такой же масти.
0
|
||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||
| 29.01.2019, 11:21 [ТС] | ||
|
например для моего случае 8000 групп (для 16152 элементов) но всего в данных 1000000 элементов, то есть всего групп для проверки у нас будет 1000000-16152+8000 - это то число групп, которое будет сформировано, то есть проверяя каждый с каждым в моем случае мы выиграем только 8152 итерации, а это 0,08152% от общего числа. или всё же я не так всё понимаю?
0
|
||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||||
| 29.01.2019, 11:30 | |||||
|
Элементов 16152 или все-таки 1000000? Если у вас 16152 элементов, то проверка каждого с каждым выльется в 161522 = 260887104 проверок. Если у вас 1000000 элементов, то проверка каждого с каждым выльется в 10000002 = 1000000000000 проверок. При "карточном" же подходе у вас количество проверок будет строго n: 16152 для 16152-х элементов и 1000000 для 1000000 элементов.* * По факту, конечно, немного больше — в зависимости от качества хэш-функции, но количество будет стремиться к n.
0
|
|||||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||||||
| 29.01.2019, 11:44 [ТС] | ||||||
|
после работы GroupBy будет 16152 (это по моим данным уже проверено) это 8000 групп, то есть почти везде в группе будет по 2 элемента, редко 3. давайте по порядку: 1. групп нет, создаем первую группу, туда кладется первый из 1000000 элемент 2. проверяем со всеми группами, если не совпало, создаем группу и переходим на 1, если совпало - включаем в группу и переходим на 1 Формально мы пройдём по 1000000 элементов, но сделаем 1000001*500000 проверок. Я когда писал свой код, то сразу исключал такой вариант, чтобы не делать лишний проход этих 1000000. Но по факту разница в скорости в несколько сотен раз заставляет меня сильно задуматься о том, что я серьёзно что-то не понимаю.
0
|
||||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 29.01.2019, 11:49 | ||
|
При группировке очень активно используется хэширование и хэш-таблицы — это когда нужная группа (грубо говоря, индекс нужной группы в массиве групп) находится за одну операцию, без необходимости обхода и проверки всех групп. Единственный случай, когда будет производиться проверка всех групп — это когда все уникальные ключи будут генерировать одинаковые хэш-коды (вызов GetHashCode на ключе группировки). Но ключом у вас выступает ulong, а значит это исключено.
0
|
||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
|||
| 29.01.2019, 11:53 [ТС] | |||
|
0
|
|||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 29.01.2019, 11:59 | ||
|
Вот они используются в кишках GroupBy. В качестве хэша для этих таблиц будет использоваться результат вызова GetHashCode на ваших ключах.
1
|
||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||
| 29.01.2019, 12:56 [ТС] | ||
|
то есть если есть четыре группы черви, пики, трефы и бубны, то найдя элемент червы, я сразу попадаю в группу по индексу червей, но в ряде случаев может понадобиться сравнить только элементы в группе. То есть есть таблица сопоставлений черви и адреса в памяти. Кажется понял суть. Спасибо.
0
|
||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||
| 29.01.2019, 16:18 | |||
|
Возможна ситуация (по принципу Дирихле), когда из-за коллизии хэш-значений два разных элемента с разными ключами будут направлены в один и тот же индекс. В этом случае по индексу будет храниться несколько групп и при попадании в такой индекс будет уже проводиться проверка на равенство добавляемого ключа с ключом каждой группы (не элементов группы!). Поэтому производительность хэш-таблицы зависит от реализации хэш-функции ключа.
1
|
|||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||
| 29.01.2019, 16:33 [ТС] | ||
|
0
|
||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
|
| 30.01.2019, 06:15 [ТС] | |
|
Я продолжаю упарываться в тему тут, если кто-то захочет...
0
|
|
| 30.01.2019, 06:15 | |
|
Помогаю со студенческими работами здесь
74
Уникальные значения Уникальные значения
Excel найти уникальные значения из первого столбца и фильтровать - не брать пустые значения из 3 столбца DBLookupComboBox Уникальные значения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html
Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
|