Около Сортировки Алгоритмов - Когда использовать?

Вы всегда заменяете текущие данные новыми извлеченными данными, вам необходимо добавить в них.

self.myAds = data!

вместо этого вам нужно добавить новые данные в уже существующие.

self.myAds.append(contentsOf: data!)
8
задан cynicalman 29 September 2008 в 01:45
поделиться

5 ответов

Существует большая "жадная" эвристика, где Вы периодически выбираете минимум набора. Жадная эвристика не прекрасна, поэтому даже при выборе минимума, который Вы, как гарантируют, не получите к лучшему окончательному ответу. На самом деле, метаэвристическое СХВАТЫВАНИЕ, Вы намеренно представляете случайную ошибку так, чтобы Вы получили несколько конечных решений и выбрали лучшее. В этом случае представление некоторой ошибки в Вашей программе сортировки в обмен на скорость было бы хорошим компромиссом.

4
ответ дан 5 December 2019 в 08:55
поделиться

Это - общее летающее предположение, но, учитывая свойственную субъективность мер "по уместности" при сортировке результатов поиска, я рисковал бы этим, действительно не имеет значения, отсортированы ли они отлично. То же могло быть сказано для рекомендаций. Если можно так или иначе расположить, что любая часть алгоритма для тех вещей является O (n) затем, Вы могли бы надеяться избегать вида.

Знайте также, что в худшем случае Ваши "почти отсортированные" данные не встречают одну возможную интуитивную идею "почти отсортированного", который является, что это имеет только небольшое количество инверсий. Причина этого состоит просто в том что, если Ваши данные имеют только O (n) инверсии, то можно закончить сортировать его в O (n) время с помощью вида вставки или вида коктейля (т.е. двухсторонняя пузырьковая сортировка). Из этого следует, что Вы не могли возможно достигнуть этой точки от полностью неотсортированного в O (n) время (использующий сравнения). Таким образом, Вы ищете приложения, где подмножество большинства данных отсортировано, и остаток рассеивается, не для приложений, требующих, чтобы каждый элемент был близко к его правильному положению.

9
ответ дан 5 December 2019 в 08:55
поделиться

Просто размышляя здесь, но одна вещь я воображаю, оптимизация запросов базы данных.

Запрос базы данных на декларативном языке, таком как SQL должен быть переведен в пошаговую программу, названную "планом выполнения". Один SQL-запрос может обычно переводиться во многие такие планы выполнения, которые все дают тому же результату, но могут иметь очень переменную производительность. Оптимизатор запросов должен найти самый быстрый или по крайней мере один, который довольно быстр.

Оптимизаторы запросов на основе издержек имеют "функцию стоимости", которую они используют для оценки времени выполнения данного плана. Исчерпывающие оптимизаторы проходят все возможные планы (для некоторого значения "всех возможных") и выбирают самого быстрого. Для сложных запросов количество возможных планов может быть непомерно большим, ведя к чрезмерно долгим временам оптимизации (перед ровным началом поиска в базе данных!), таким образом, существуют также неисчерпывающие оптимизаторы. Они только смотрят на некоторые планы, возможно, со случайным элементом в выборе которые. Это работает, так как обычно существует большое количество "хороших" планов, и не могло бы быть настолько важно найти абсолютно лучший одно - вероятно, лучше выбрать 5 вторых планов вместо оптимальных 2 вторых планов, если это требует, чтобы несколько минут оптимизации нашли 2 вторых плана.

Некоторые алгоритмы оптимизации используют отсортированную очередь "обещания" (частичных) планов. Если действительно не имеет значения при нахождении абсолютно лучшего плана возможно, Вы могли бы использовать почти отсортированную очередь?

Другая идея (и я все еще просто размышляю), планировщик для процессов или потоков в системе с разделением по времени, где не могло бы быть важно, если определенный процесс или поток получают свой временной интервал несколько миллисекунд позже, чем если бы строго отсортировано по приоритету.

4
ответ дан 5 December 2019 в 08:55
поделиться

Где угодно

  1. Вы, как предполагается, реагируете быстро,
  2. Вы не обещаете точное поведение клиенту,
  3. но внутренне у Вас есть некоторые правила

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

Пример расписания ресурса ответил бы на доставку пиццы или упаковочные коробки книг людям и т.д. Вы не можете использовать его, где детерминированный результат ожидается, но существует большой пример в реальной жизни, где вещи не так детерминированы/предсказуемы.

1
ответ дан 5 December 2019 в 08:55
поделиться

Обычное применение для почти-сортировки - это когда человек выполняет попарное сравнение, и вы не хотите задавать ему столько вопросов.

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

2
ответ дан 5 December 2019 в 08:55
поделиться
Другие вопросы по тегам:

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