Проблема создания Схемы направляющих

Количество элементов в корзине b - это количество элементов <= b.end минус количество элементов < b.start.

Таким образом, вы можете создать starts массив бинов, отсортированных по началу, и ends массив бинов, отсортированных по концу. Затем пройдитесь по всем 3 массивам в шаге. Когда вы продвигаетесь после каждого x в a, продвигайтесь дальше, начиная с x < b.start и , вычитая position_in_a из числа для этого бина. Затем продвиньтесь до конца с помощью x <= b.end и и добавьте position_in_a к счету для этого бина.

Общая сложность составляет O (N log N), где преобладает сортировка начального и конечного массивов. Ходить по 3 массивам и корректировать счет - O (N).

В своем коде вы генерируете массив уже отсортированных бинов, так что если вы можете сделать это, то можете пропустить этап сортировки, и общая сложность равна O (a.length + bin_count). Я бы не стал даже создавать этот массив, поскольку вы можете легко рассчитать начальное и конечное значения по индексу.

10
задан Josh Moore 22 December 2008 в 01:56
поделиться

5 ответов

Поскольку я использую ограничения внешнего ключа, я использую формат SQL для миграций. В environment.rb:

# Use SQL instead of Active Record's schema dumper when creating the test database.
# This is necessary if your schema can't be completely dumped by the schema dumper,
# like if you have constraints or database-specific column types
config.active_record.schema_format = :sql
8
ответ дан 3 December 2019 в 15:53
поделиться

Я также ожидал видеть, что новый .sql файл появляется после "граблей db:migrate", после того как я установил

config.active_record.schema_format = :sql

в config/environment.rb.

По-видимому, это не то, как это работает, как бы то ни было. Я должен сделать это явно для получения дб / [development|test|production] _structure.sql файл:

rake db:structure:dump
10
ответ дан 3 December 2019 в 15:53
поделиться

христианин прав.

сделать

конфигурация active_record.schema_format =: sql

в environment.rb

но затем необходимо использовать другой формат дампа схемы и расположение файла. попытайтесь делать свою миграцию и искать "schema.sql" вместо scehema.rb

причина всего этого состоит в том, что точка файла схемы является неконкретной базой данных (работы для всех типов баз данных) файл. таким образом, когда Вы используете функции, которые только работают над mysql через unsupoorted, выполняют оператор, они не могут быть shoehorned в к schema.rb

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

Чтобы использовать вариант SQL для тестирования (вместо schema.rb), вам нужно использовать

rake db: test: clone_structure

Наша схема использует UUID (uuid gem ), а также красивый плагин FK для Red Hill on Rails (RHoR). К сожалению, для FK требуются PK, которые можно добавить только с помощью EXECUTES в миграциях.

Хорошо известно, что эти операции не попадают в schema.rb; однако было труднее найти rake, альтернативу db: test: prepare для приложений, которые не могут использовать schema.rb.

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

Просто обновление для тех, кто использует Rails 3 (бета 4, в настоящее время) - решение Кристиана по-прежнему верное, единственное правильное место для размещения строки находится в config / application.rb в рамках класса Application , который должен быть определен в модуле, названном в честь вашего проекта Rails.

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

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