parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Попытка перевести свое видение на язык теории (т.е ваш "лагерь" от практики, а я из "сферического вакуума")

andylars 07.06.2016 15:37 / 07.06.2016 15:59

Попробую очередной раз формализовать то, что мне доставляет подсознательный дискомфорт во всем этом подходе к index/key. И почему.


1. Парсеровский хеш = Упорядоченный Словарь

2. Упорядоченный Словарь = { ключи(множество) + индексы(ряд) -> значения(набор) }
То есть 2 проекции: множества + ряда -> на набор значений

3. Множество = набор уникальных элементов, которое имеет характерную природу операций со множествами (overlaying)

4. Ряд = упорядоченное множество(!) уникальных элементов (индексы). Т.е. ряд наследует все свойства "множества" (и операций над ним) + добавляет природу своих операций, связанных конкретно с последовательностью (insertion).


Схема_1 "Упорядоченный словарь"

5. При работе по ключу или индексу, в любом случае происходит работа в два этапа:
I этап - операции с выбранной проекций (ключ или индекс)
II этап - упорядочивание второй проекции (индекс или ключ), после операций с I

Схема_2 "Режим работы по ключам"
Схема_3 "Режим работы по индексам"

Т.е. сначала происходят правила для операций "множества или ряда" на I-ом этапе (выбранный режим), и с результатом происходит применение правил (целостности) для "множества" или "ряда" на II-том этапе.

Это де-факто и происходит. Когда мы складываем ключи, а индексы перестраиваюся. Теперь, когда мы производим операции над индексами, ключи уже II-ом этапе - приводятся в соответствии с "множеством" (коллизия одноименных ключей).


6. Т.к. обе проекции на значение = ключи + индексы - сами связаны между собой, то во многих случаях свойство "ряда" для индексов (как самостоятельного множества) - вырождается, и поставляет только порядок в чистом виде для "множества" ключей.

Однако, если производить операции с двумя хешами, используя смещение по индексу, то индексы хешей работают как "полноценные ряды": то есть, можно отдельно провести операции для индексов, как для самостоятельного множества (add,union,sub),

Схема_4: "Операции со множествами для ключей и для индексов"

А также, ряд имеет свои, своейственные только ему операции со "вставками"/"срезами":

Cхема_5: "Insertion-операции только для рядов (индексов).


Вывод: понятно, что кажого результата, приведенного в схемах, можно достичь и методами (из другой природы), то есть поменять порядок элементов - методами работы со множествами, или вставить/сместить - путем пересечения/вычитания, но это не должно быть самоцелью, так и умножать можно только операциями сложения.

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

Однако, это не должно быть призывом к действию "выкинуть всё", чем можно достичь того же, и попутно сломать теорет.модель - смешивав операции множества и ряда в одну кучу, так можно вообще сделать ^хеш.do[ $.brainfuck_options[] ]

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