Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Субботний шахматун 1000х1000 / 17 сообщений из 17, страница 1 из 1
30.09.2017, 18:51
    #39528874
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Субботний шахматун 1000х1000
Привед други! Шахматуны и базисты.

В продолжение задачи о 1000 ферзях http://www.sql.ru/forum/1270505/pyatnichnaya-zadachka-dlya-uma-za-1-million

Допустим найдена расстановка ферзей для доски 8x8



Расстановка сохраняется в БД в виде:

Код: plsql
1.
insert into queen8x8(id,position) values(1,'a1b5c8d6e3f7g2h4');


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

Мы можем по логике приложения или по триггеру добавить еще несколько
строк в queen8x8 которые учитывают "развороты" и "зеркала".

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

Код: plsql
1.
select * from queen8x8 where position like 'a1b5__d6e__7g2__';



Возник вопрос. Можем-ли мы создать Domain-Index который будет
учитывать этот момент? Ради экономии места. Для доски 1000х1000 клеток.

P.S. Не спрашивайте зачем это надо. Считайте что это - просто мозговой штурм
и вопрос "зачем" уже пройден и стоит вопрос "как".
...
Рейтинг: 0 / 0
30.09.2017, 19:49
    #39528886
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Субботний шахматун 1000х1000
mayton,
Код: plsql
1.
like 'a1b5__d6e__7g2__'


я-то дома, сам с собой, русским яз ы ком всегда разговариваю...

кто такая
Код: plsql
1.
like 'a1b5__d6e__7g2__'


?
Следует ли понимать, что это такая b5, которая в субботу вечером стоит на второй позиции записи "решения"?

А кто такие d6e и 7g2? Для ослабленного субботой взгляда тут либо e и 7 лишние, если образец фиксирует расстановку, либо прилично было бы явить миру, как они связаны с определением "домена".

А доменный индекс можно построить по любой детерминированной функции, возвращающий скалярное значение само по себе пригодное для индексации.
До 12.2 можно изобретать форму записи, умеющую отображать факт того, что тебя интересует
ферзь установленный в 4й вертикали на 6й горизонтали (что-то вроде '001005006%' для начала твоей недоопознаваемой кодировки), или что-то другое, для чего сгодился бы вариант такого текстового индекса.
В 12.2 можно строить индексы на json-полях.
--------------
PS
Попробуй выразить свои мысли на Прологе.
Может быть это приведет к совсем другой форме вопросов про индексы.
...
Рейтинг: 0 / 0
30.09.2017, 19:55
    #39528890
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Субботний шахматун 1000х1000
booby,
ой, для 1000 4 знакоместа потребуется...
...
Рейтинг: 0 / 0
30.09.2017, 20:12
    #39528893
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Субботний шахматун 1000х1000
boobybooby,
ой, для 1000 4 знакоместа потребуется...
угу и '00010005____0006%'
...
Рейтинг: 0 / 0
30.09.2017, 20:14
    #39528894
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Субботний шахматун 1000х1000
booby?
Следует ли понимать, что это такая b5, которая в субботу вечером стоит на второй позиции записи "решения"?

А кто такие d6e и 7g2?

Да. Опечатка.
...
Рейтинг: 0 / 0
30.09.2017, 20:17
    #39528895
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Субботний шахматун 1000х1000
boobyА доменный индекс можно построить по любой детерминированной функции, возвращающий скалярное значение само по себе пригодное для индексации.
Почти готов согласиться. Но в чем тогда разница между доменным индексом и индексом по функции?
...
Рейтинг: 0 / 0
30.09.2017, 21:21
    #39528899
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Субботний шахматун 1000х1000
Прочитал только статью с мейлру специально, чтобы дать мозгу подумать без подсказок и не верится, что это такая уж тяжелая задача: каждый ферзь стоит на своей отдельной горизонтали/вертикали, так разве трудно для современных машин проверить такое... можно даже наверное взять 1024 для ровной битовой маски.
...
Рейтинг: 0 / 0
30.09.2017, 21:34
    #39528902
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Субботний шахматун 1000х1000
mayton,
эти термины могут использоваться как синонимы.

Но, кроме того, под доменными индексами специфически понимаются специальные конструкции, живущие в собственных таблицах, снабженных вполне обычными индексами, поиск по которым идет специальными функциями.
В частности, текстовые индексы в рамках Oracle Text, поддерживаются таблицами и кодом, живущим в схеме ctx, и текстовые индексы CTX - именно доменные индексы во втором смысле.
А json-индексы - синтаксический сахар над текстовыми.
Т.е. для поддержки доменных индексов нужна а) доменная математика, раскрывающая "смысл домена", б) вспомогательные (обычные)таблицы/индексы/код обеспечивающие поиск, контекст которого специфичен для домена.
В этом смысле доменные индексы могут никак не соотносится с тем, что обычно понимается под индексами, и даже не иметь формы стандартного синтаксического объявления.
Хотя для доменов поддерживаемых из коробки самим oracle, что-то на уровне синтаксиса как правило дается.
...
Рейтинг: 0 / 0
30.09.2017, 21:40
    #39528903
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Субботний шахматун 1000х1000
xtenderПрочитал только статью с мейлру специально, чтобы дать мозгу подумать без подсказок и не верится, что это такая уж тяжелая задача: каждый ферзь стоит на своей отдельной горизонтали/вертикали, так разве трудно для современных машин проверить такое... можно даже наверное взять 1024 для ровной битовой маски.
Проверить - можно. Это не сложно. Я-же говорю. Спрашивать "зачем" - не стоит.
...
Рейтинг: 0 / 0
30.09.2017, 22:28
    #39528907
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Субботний шахматун 1000х1000
xtenderПрочитал только статью с мейлру специально, чтобы дать мозгу подумать без подсказок и не верится, что это такая уж тяжелая задача: каждый ферзь стоит на своей отдельной горизонтали/вертикали, так разве трудно для современных машин проверить такое... можно даже наверное взять 1024 для ровной битовой маски.
существо дело в вычислительной сложности задачи.
Логически задачу можно видеть как разделенную на две части:
1) сгенерировать все возможные комбинации расположения n ферзей на доске nxn
2) отобрать среди них "правильные" - применительно к ферзям - такие, где на каждой вертикали расположен ферзь и он не бьется никаким другим из расставленных.

В своей сути это арифметическая задача, описание которой есть у Гика в книжке "Шахматы и математика":
Дан набор числе от 1 до n
Частным решением считается последовательность числе от 1 до n такая что:
- все числа использованы
- ни одно не повторяется дважды
- если n - максимальный (последний) номер, i - номер позиции, а f(i) - число записанное в позиции i, то:
а) последовательность f(i) + i дает набор не повторяющихся чисел и
b) последовательность f(i) + n - i + 1 также дает набор не повторяющихся чисел.

Для таких наборов известно, что если i,j - позиции и i<j<=n, то abs(f(i)-f(j)) <> (j - i)

Первоначальный вопрос - как получить все возможные расстановки.
Обсуждаемый на миллион вопрос - о получении подмножества расстановок на доске 1000x1000 таких, что занятость части позиций есть входное условие задачи при условии, что решения могут быть получены за полиномиальное время.

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

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

Применительно к базам данных вопрос - как ускорить двухфазный процесс, состоящий из фазы записи набора данных в таблицу и фазу наложения фильтра, путем резкого сокращения объема данных на фазе добавления записей.
...
Рейтинг: 0 / 0
01.10.2017, 11:58
    #39528969
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Субботний шахматун 1000х1000
mayton
P.S. Не спрашивайте зачем это надо. Считайте что это - просто мозговой штурм
и вопрос "зачем" уже пройден и стоит вопрос "как".


автор
Ученые из Сент-Эндрюсского университета (Великобритания) предложили миллион долларов за разгадку старинной шахматной задачи. Об этом сообщается на сайте университета.
...
Решение для стандартной доски в 64 клетки было найдено еще в 1850 году. С увеличением размеров поля и количества фигур задача усложняется. Исследователи обнаружили, что если размер доски увеличить до 1000 на 1000 клеток, компьютерные программы начинают зависать.
...


.....
stax
...
Рейтинг: 0 / 0
01.10.2017, 13:03
    #39528986
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Субботний шахматун 1000х1000
Все прочитайте топик-родитель сначала.
...
Рейтинг: 0 / 0
01.10.2017, 14:11
    #39529000
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Субботний шахматун 1000х1000
maytonв чем тогда разница между доменным индексом и индексом по функции?В том, что для доменного индекса создаются вспомогательные структуры - поковыряй для примера Oracle Text.
Индекс по функции просто индексирует выражение.
Для твоей задачи пишешь функцию которая приводит выражение к "канонической форме" и ее индексируешь.
maytonВсе прочитайте топик-родитель сначала.Для человека с computer science образованием тот топик не несет никакой дополнительной смысловой нагрузки.

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

Возвращаясь к реальному миру, в 99% случае надо найти не все решения, а оптимальное. А уже для него есть ряд устоявшихся подходов.
Я еще много лет назад экспериментировал с генетическим алгоритмом, который прекрасно находил решение для 1000+ ферзей на моем слабеньком писюке.

PS. Не совсем понятно почему ты решил влезть с этой "оригинальной" задачей именно в ветку Оракл.
...
Рейтинг: 0 / 0
01.10.2017, 18:17
    #39529027
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Субботний шахматун 1000х1000
dbms_photoshopPS. Не совсем понятно почему ты решил влезть с этой "оригинальной" задачей именно в ветку Оракл.
Ищу применение для DI. Ферзи - просто повод.
...
Рейтинг: 0 / 0
01.10.2017, 20:31
    #39529060
_Nikotin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Субботний шахматун 1000х1000
mayton,

Молекулы индексировали как-то.
...
Рейтинг: 0 / 0
01.10.2017, 20:54
    #39529062
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Субботний шахматун 1000х1000
maytondbms_photoshopPS. Не совсем понятно почему ты решил влезть с этой "оригинальной" задачей именно в ветку Оракл.
Ищу применение для DI. Ферзи - просто повод.
http://docs.oracle.com/database/121/ADDCI/ext_idx_frmwork.htm#ADDCI4390 When to Use Extensible Indexing
Oracle's built-in indexing facilities are appropriate to a large number of situations. However, as data becomes more complex and applications are tailored to specific domains, situations arise that require other approaches. For example, extensible indexing can help you solve problems like these:

Implementing new search operators using specialized index structures

You can define operators to perform specialized searches using your index structures.

Indexing unstructured data

The built-in facilities cannot index a column that contains LOB values.

Indexing attributes of column objects

The built-in facilities cannot index column objects or the elements of a collection type.

Indexing values derived from domain-specific operations

Oracle object types can be compared with map functions or order functions. If the object uses a map function, then you can define a function-based index for use in evaluating relational predicates. However, this only works for predicates with parameters of finite range; it must be possible to precompute function values for all rows. In addition, you cannot use order functions to construct an index.

И в том же Data Cartridge Developer's Guide конкретные примеры
Код: plaintext
1.
2.
Part III Scenarios and Examples
Click to expand 15 Power Demand Cartridge Example
Click to expand 16 PSBTREE: Extensible Indexing Example

Обрати внимание, что функция ODCIIndexCreate для user defined domain indexes создает и вставляет данные во вспомогательную таблицу(цы).
...
Рейтинг: 0 / 0
01.10.2017, 21:07
    #39529064
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Субботний шахматун 1000х1000
dbms_photoshop, OK спасибо.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Субботний шахматун 1000х1000 / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]