Заданный ввод, который показывает назначения тегов изображениям следующим образом (читая это из php: // stdin построчно, так как ввод может быть довольно большим)
image_a tag_lorem
image_a tag_ipsum
image_a tag_amit
image_b tag_sit
image_b tag_dolor
image_b tag_ipsum
... (there are more lines, may get up to a million)
Выходные данные отображаются следующим образом. По сути, это тот же формат, что и в другой записи, показывающей, существует ли комбинация тега изображения на входе. Обратите внимание, что для каждого изображения будут перечислены все доступные теги и показано, назначен ли тег для изображения с помощью 1/0 в конце каждой строки.
image_a tag_sit 0
image_a tag_lorem 1
image_a tag_dolor 0
image_a tag_ipsum 1
image_a tag_amit 1
image_b tag_sit 1
image_b tag_lorem 0
image_b tag_dolor 1
image_b tag_ipsum 1
image_b tag_amit 0
... (more)
Я разместил там свое неэффективное решение. Чтобы получить лучшее представление о входных и выходных данных, я вставил 745 строк (что объясняет назначение тегов 10 изображений) в сценарий через stdin, и я получил 555025 строк после выполнения сценария, используя около 0,4 МБ памяти. Однако он может убить жесткий диск быстрее из-за интенсивного ввода-вывода на диске (при записи / чтении во временный файл кэша столбцов).
Есть ли другой способ сделать это? У меня есть другой сценарий, который может превратить стандартный ввод в что-то вроде этого (не уверен, что это полезно)
image_foo tag_lorem tag_ipsum tag_amit
image_bar tag_sit tag_dolor tag_ipsum
p / s: порядок тегов_ * не важен, но он должен быть одинаковым для всех строк, т.е. это не то, что я хочу (обратите внимание, что порядок тегов_ * несовместим как для tag_a, так и для tag_b)
image_foo tag_lorem 1
image_foo tag_ipsum 1
image_foo tag_dolor 0
image_foo tag_sit 0
image_foo tag_amit 1
image_bar tag_sit 1
image_bar tag_lorem 0
image_bar tag_dolor 1
image_bar tag_ipsum 1
image_bar tag_amit 0
p / s2: я не знаю диапазон tag_ *, пока не закончу читать stdin
p / s3: Я не понимаю, почему мне отказывают в голосовании, если требуется разъяснение, я более чем рад предоставить их, я не пытаюсь высмеивать что-то или публиковать здесь чепуху. Я снова переписал вопрос, чтобы он звучал как настоящая проблема (?). Однако сценарию действительно не нужно заботиться о том, что на самом деле является вводом или используется ли база данных (ну, данные извлекаются из хранилища данных RDF, если вы ДОЛЖНЫ знать), потому что я хочу, чтобы сценарий можно было использовать для другого типа. данных, пока ввод в правильном формате (следовательно, исходная версия этого вопроса была очень общей).
p / s4: я стараюсь избегать использования массива, потому что я хочу максимально избежать ошибки нехватки памяти (если 745 строк, содержащих только 10 изображений, будут расширены до 550 тыс. Строк, просто представьте, что у меня есть 100, 1000, или даже более 10000 изображений).
p / s5: если у вас есть ответ на другом языке, не стесняйтесь размещать его здесь. Я думал о решении этой проблемы с помощью clojure, но все еще не мог найти способ сделать это правильно.