IndexOf также замедляются в списке. Более быстрое решение?

Если все, что вы хотите сделать, это просто использовать git-клиент Cygwin с github.com, то есть гораздо более простой способ без необходимости загружать, извлекать, преобразовывать, разбивать файлы сертификатов. Действуйте следующим образом (я предполагаю, что Windows XP с Cygwin и Firefox)

  1. В Firefox перейдите на страницу github (любая)
  2. щелкните значок github в адресной строке. для отображения сертификата
  3. Нажмите «дополнительная информация» -> «показать сертификат» -> «детали» и выберите каждый узел в иерархии, начиная с самого верхнего; для каждого из них нажмите «Экспорт» и выберите формат PEM:
    • GTECyberTrustGlobalRoot.pem
    • DigiCertHighAssuranceEVRootCA.pem
    • DigiCertHighAssuranceEVCA-1.pem
    • github.com.pem
  4. Сохраните вышеуказанные файлы где-нибудь на локальном диске, измените расширение на .pem и переместите их в / usr / ssl / certs в вашей установке Cygwin (Windows: c: \ cygwin \ ssl \ certs)
  5. (необязательно) Запустите c_reshash из bash.

Вот и все.

Конечно, это устанавливает только одну иерархию сертификатов, ту, которая вам нужна для github. Конечно, вы можете использовать этот метод с любым другим сайтом без необходимости устанавливать 200 сертификатов сайтов, которым вы (не обязательно) доверяете.

10
задан NastyNateDoggy 2 July 2009 в 18:50
поделиться

8 ответов

Если это не отсортировано, но порядок необходимо сохранить , тогда у вас может быть отдельный Dictionary , который будет содержать индекс для каждого элемента.

Если вам нужен отсортированный список, затем проверьте предыдущие сообщения - вы можете использовать SortedList в .Net 3.5 или отсортировать его и использовать BinarySearch в более старых версиях .Net.

[Edit] Вы можете найти похожие примеры в Интернете, например: OrderedList . Этот внутренний использует ArrayList и HashTable, но вы можете легко сделать его универсальным.

[Edit2] Упс ... приведенный мной пример не реализует IndexOf, как я описал в начале ... Но вы поняли, что один список должен быть упорядочен, а другой используется для быстрого поиска.

11
ответ дан 3 December 2019 в 14:53
поделиться

Отсортируйте его, используя List .Sort , затем используйте метод List .BinarySearch : "Поиск по всему sorted List (T) для элемента [...] Этот метод представляет собой операцию O (log n), где n - количество элементов в диапазоне. "

6
ответ дан 3 December 2019 в 14:53
поделиться

Возможно, вы ищете SortedList ?

3
ответ дан 3 December 2019 в 14:53
поделиться

Если порядок объектов в списке имеет , который нужно сохранить, то единственный способ, который я могу придумать, где вы собираетесь получить максимально быстрый доступ, - это сообщить объекту, какова его позиция в индексе, когда он добавлен и т. д. в список. Таким образом вы можете запросить объект, чтобы получить его индекс в списке. Обратной стороной, и, на мой взгляд, большим недостатком, является то, что теперь вставленные объекты зависят от списка.

2
ответ дан 3 December 2019 в 14:53
поделиться

Нет причин, по которым вам когда-либо нужно было заказывать хеш-список ... в этом-то и дело. Тем не менее, хеш-список должен с готовностью помочь.

1
ответ дан 3 December 2019 в 14:53
поделиться

Я предлагаю использовать класс SortedList или SortedDictionary , если вам нужно отсортировать элементы. Различия заключаются в следующем.

  • SortedList использует меньше памяти, чем SortedDictionary .

  • SortedDictionary имеет более быструю вставку и операции по удалению несортированные данные: O (log n) в отличие от O (n) для SortedList .

  • Если список заполняется сразу из отсортированных данных, SortedList равно быстрее, чем SortedDictionary .

Если вы просто хотите сохранить порядок, вы можете просто использовать Dictionary и сохранить элемент как ключ и индекс как значение. Недостатком является то, что переупорядочивание элементов, вставка или удаление являются довольно дорогостоящими.

2
ответ дан 3 December 2019 в 14:53
поделиться

Я не уверен в особенностях C #, но вы могли бы отсортировать его (QuickSort?), А затем использовать двоичный поиск по нему ( Производительность BinarySearch равна O (log2 (N)), по сравнению с последовательностью, например indexOf, которая равна O (n)). (ВАЖНО: для двоичного поиска ваша структура должна быть отсортирована)

Когда вы вставляете элементы в свою структуру данных, вы также можете попробовать модифицированный двоичный поиск, чтобы найти точку вставки, или, если вы добавляете большую группу, вы должны добавить их, а затем отсортировать.

Единственная проблема в том, что вставка будет медленнее.

1
ответ дан 3 December 2019 в 14:53
поделиться

Если вы используете класс List, вы можете использовать метод Sort для его сортировки после первоначального заполнения, затем используйте метод BinarySearch для поиска соответствующего элемента.

1
ответ дан 3 December 2019 в 14:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: