Сложные задачи
Думаю, такие вещи случаются, но я искренне не могу представить, какая задача может быть невыполнима.
Исключая те задачи, конечно, которые просто безумны и не могут быть выполнены чисто физически на имеющемся оборудовнии.
Мне бывало пару раз лень делать что-то сложное, потому что я примерно прикидывал, сколько (много) придётся затратить времени на выполнение поисков или разработки решения, в таких ситуациях было проще и, как мне кажется, рациональнее, поставить иную задачу, к чему я и старался всё свести, но достигнуть одной и той же цели.
У каждого файла должен быть заранее посчитанный хеш (например, MD5). Хеши хранятся в сортированном списке. Хеш нового файла ищется там бинпоиском. Если есть совпадения, то скорее всего файлы идентичны (для гарантии можно побайтово сравнить с нужным файлом). Работает (не считая вычисления хеша) за O(log N) количества файлов, реализуется за полчаса.
Аналогичным образом можно искать дубликаты в любом множестве файлов -- нужно будет отсортировать список хешей и найти все повторы.
Исключая те задачи, конечно, которые просто безумны и не могут быть выполнены чисто физически на имеющемся оборудовнии.
Вот скажут -- разработай искусственный интеллект, превосходящий человеческий по всем параметрам.
Никто до сих пор этого не сделал, но это не значит, что это невозможно в принципе. Вполне может быть, что ИИ (если его придумать) сможет работать даже на персоналках, так что задача не является однозначно безумной.
Имеется полным полно задач, которые не решены, но отсутствие решения в них не доказано.
По поводу задач, с которыми не справился лично я -- однажды нужно было быстро разобраться в наборе монструозных java библиотек и переделать построенную на них программу. Я несколько дней потыкался и сдался.
А я им такой — а что такое искусственный интеллект и чем он отличается от естественного? :) И на этом всё закончится, потому что ответ не будет найден, а занчит и задача не будет сформулирована.
Но позвольте, Сэр, программисты не должны заниматься доказательством существования решения каких-то задач. Особенно в тех случаях, если задачи несильно относятся к компетенции программиста.
Вот с ИИ как раз такая ситуация. Разрабатывать модель интеллекта — это не задача программиста. Да и вообще, я бы гнал в шею заказчиков, которые ТЗ заменяют на общие фразы.
Последние тенденции говорят о том, что так и будет. Только вычислительная часть ИИ будет находиться в облаке, а вот управляющий интерфейс — у клиента. Но это я так, к слову.
А я им такой — а что такое искусственный интеллект и чем он отличается от естественного? :) И на этом всё закончится, потому что ответ не будет найден, а занчит и задача не будет сформулирована.
При желании можно строго сформулировать.
К примеру программа, которая пройдет тест Тьюринга, организованный заказчиком.
Этим вы принижаете программистов до исполнителей, выполняющих почти механическую работу по комбинированию ранее придуманных шаблонов. В таком случае, конечно, любая корректно поставленная задача выполнима за конечное время.
Что ж ни у кого такого желания не появилось? Ох, если бы это можно было однозначно сформулировать, то не было бы нескольких течений, которые понимают ИИ и интеллект в частности по-разному.
Вот это уже лучше, с этим можно работать. Но это ведь пыполнимая задача, потому что программы, которые его прошли, существуют, да и вообще много информации о том, как таким программы построить. Но, если брать в рассмотрение довод с "китайской комнатой", тогда тест Тьюринга и его прохождение не является необходимым критерием, чтобы построить ИИ. И если бы было чёткое однозначное определение интеллекта, людям бы не приходилось спорить о том, должна ли машина понимать, что она делает или она должна только проходить тесты.
Вовсе нет, Сэр. Вот смотрите: если заказчик ставит задачей разработать ИИ, то он должен сначала обращаться не к программисту, а к математику, который хорошо владеет теорией нечётких множеств, теорией кибернетики, теорией экспертных систем и так далее, чтобы разработать конкретную модель интеллекта.
Далее, когда разработана модель, оформляется техническое задание. При этом в техническом задании, если не указана конкретные методы его реализации, то очень хорошо расписаны функции, которые программа должна выполнять, очень подробно.
И вот тут уже необходимы навыки программиста, который разбирается, как программно реализовать функции, знает, где могут быть ошибки в реализации, знает, какие технологии применить, чтобы получить максимальную производительность.
Математику, который разрабатывал теоретическую модель и выбирал группу методов, которыми будет решаться задача, это знать ни к чему.
Есть вид задач, которые считаются вообще невыполнимыми. В прямом смысле этого слова. Такие задачи называются трансцедентальными. Они требуют такой объём вычислительной мощности, которого просто нет на земле и никогда не будет. Но, однако, эти задачи могут быть очень просты со стороны понимания.
У каждого файла должен быть заранее посчитанный хеш (например, MD5). Хеши хранятся в сортированном списке. Хеш нового файла ищется там бинпоиском. Если есть совпадения, то скорее всего файлы идентичны (для гарантии можно побайтово сравнить с нужным файлом). Работает (не считая вычисления хеша) за O(log N) количества файлов, реализуется за полчаса.
Аналогичным образом можно искать дубликаты в любом множестве файлов -- нужно будет отсортировать список хешей и найти все повторы.
За идею спасибо - может пригодится) Однако я допустил ошибку в описании задачи - нужна скорее семантическая идентичность.