Сучасна диджитал-освіта для дітей — безоплатне заняття в GoITeens ×
Mazda CX 30
×

Алгоритм классификации (в двух словах) и другие алгоритмы

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

Допустим, у нас есть набор разных предметов — некоторые из них одинаковые.

Как отсортировать?

Берем предмет и смотрим, нет ли рядом ящика, в котором уже лежит такой же предмет, похожий на наш.

Если есть — кладем наш предмет в этот ящик.

Если нет — берем пустой ящик и кладем туда наш предмет.

И снова переходим к пункту 1.

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

О них можно сказать, что они уникально идентифицируют исходный набор.

Кроме того, частота их встречаемости в исходном наборе равна единице, в отличие от тех предметов, которых в своих ящиках много.

О чем это? О поиске исключительных ситуаций в наборах? Об отслеживании багов в коде?

Уверен, применения найдутся.

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Ось послухайте байку:
Сьогодні мій робот прибирався у кімнаті. Там було небагато всілякого, і треба було складати це все по своїх ящиках. Звісно ми классифікуємо так: беремо річ і дивимося у якому ящику є подібні. Якщо немає таких ящиків, то беремо новий. І ось він так брав, брав та клав, аж поки не залишився тільки дріб’язок. І тут робот показав BSOD Чого? Того, що цей дріб’язок — кожна річ у ньому — чогось була подібна до кожної речі у кожному ящику, чи у більшості ящиків. Робот написав на екрані перед тим, як виключився: «Помилка розпізнання»
Я звісно перевірив алгоритм классифікації — оптимальний, стандартний. Чого ж так сталося? Відповідь знайшлася швидко — лінзи запітніли. Через те робот працював із меньшою роздільною здатністю штучної сітківки.
«Ха! Таки я молодець! Таку загадку розгадав!» — подумав я і старанно протер обидві лінзи ганчіркою.
Знову включив робота і приготувався залюбки милуватися його працею.
Якийсь час так і було, але тоді...
BSOD
Я кинувся до лінз. Найчистісеньки! В чому ж справа? Дослідивши всі вхідні дані я винайшов окуляри для робота. Бо коли у вас, після всіх классифікацій залишиться купка речей, які подібні до всього, знайте: вам потрібно змінити роздільну здатність штучної сітківки.
Кінець.

А зачем мы распознаем???
Не надо распознавать!
Надо чтобы виртуальная модель соответствовала действительности.

Никогда не ссорьтесь на голодный желудок. Если уже в процессе ссоры — быстро прервитесь на полуслове и съешьте пончик.

Каков бы ни был набор и какие связи в нем не были бы прописаны (прошиты) всегда можно обнаружить / добавить еще одну бесконечно полезную связь.

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

Разу уж тут про алгоритмы, то вот алгоритм прохождения литкода.
1. Открываем статистику решенных на литкоде задач — такую таблицу, где есть идентификатор задачи и то, сколько человек ее решило.
2. Находим задачу, которую решило наибольшее количество человек.
3. Решаем ее и скрываем в статистике.
4. Переходим к пункту 1.

Потому что я недостаточно богат, чтобы хранить все в тайне, в своем личном сейфе.

Коментар порушує правила спільноти і видалений модераторами.

Коментар порушує правила спільноти і видалений модераторами.

Вітаю, ти винайшов мапу/хешмапу. Але до чого тут класифікація?
Прочитав заголовок статті і відразу подумав про кластерний аналіз, а тут таке...

Про упрощение — в двух словах.
Берем что-то сложное и разбираем на элементы. Отнимаем из этой кучи элементов один.
Собираем без этого элемента остальные в то самое изначально сложное, добиваясь чтобы работало.
Если получилось — премию KISS в студию!
И переходим к пункту первому.
Отсюда можно предложить состязания по упрощению:
Кто уменьшил число строк кода тот и победитель.

Да-да, это двигатель джуновского рефакторинга. Просто «чтобы работало» имеет в реальности «50 оттенков „работало“» незнакомых человеку без опыта, вот он и выкидывает все «ненужное на первый взгляд».

Вселенной некуда спешить. Ее алгоритмы располагают миллиардолетними интервалами. Поэтому они так гениально просты и убийственны.

Конечно. Если тебе достаточно её плодов, то можно придерживаться таких взглядов.
Но тебе ж еще построенное людьми жилье нужно, компьютер нужен, там продукты из супермаркета. А архитекторы с инженерами и технологами в институтах учат сопромат и прочее, что не особо вписывается «святую простоту» таких взглядов и является следствием опыта и целкнаправленных изысканий

В том и состязание — джун и сеньор выкинут разное. Кроме того, джун выкинет,а сеньор добавит, а судья рассудит, чей код в итоге всех добавлений / удалений стал компактнее.
P.S.
Вчерась познакомился с Ломбоком. Отлично пакует.

Да нет, выкинут только джуна, если он будет сильно завзятым

Иногда джун может случайно угадать верное решение. А сеньор — так как подвержен человеческому фактору — может ошибиться.

Задумался об истинной многозадачности, одновременности, распараллеливании. Если взять по одному генератору тактовой частоты для каждой задачи и синхронизировать их вроде получается... А дальше запускаем тонну джунов одновременно и случайность превращается в закон.

голоса в его голове. не вникай

Так с нами один профессор в университете общался.
— А теперь, — говорит, — мы с вами возьмем интеграл от этой интереснейшей функции...

Ну типа наивное создание сета итерацией листа с применеием хешмапы.
Ты раньше не знал о коллекциях?

Я не программист. Я тестировщик (без официального опыта работы) Если я программирую вассаби — свой движок вебстраниц — на php+javascript и заливаю на гитхаб (время от времени) это еще не значит, что я делаю это профессионально. Или что я счастлив от этого процесса.
Мне нравится перебирать варианты и показывать само собой разумеющееся, но отчего-то нереализованное программистами.
Я точно тестировщик.

Реализованное, причем давно на всех языках. Просто надо погуглить :)

Я это практиковал уже давно, без гугления, IRL, при уборке рабочего места и рабочего шкафа и рабочего кабинета и рабочего пола.
А вот об уборке захламленного чердака своего частного дома я только мечтаю.
И вот что тут главное — ящики. Сначала надо запастись большим количеством пустых ящиков. И удобным софтом для регистрации вещей будущего упорядоченного уже склада (и уже не хлама, а антиквариата)
Программистам легко. А ты попробуй гастербайтером порулить.
А с помощью моего алгоритма — легко.

Когда ты пишешь какой-то пост, ты преследуешь какую-то конкретную мысль, или тебя просто несет и ты вбиваешь в клавиатуру просто поток сознания?

У него есть неполадки с психикой

В основном с миелиновыми оболочками нейронов и их отростков. Часто думаю, если взять искусственные электронные нейроны и ослабить там защиту от помех, получилось бы подобное моему виртуальное сознание или нет?

Но это не мешает мне писать гениальный код. Да еще забесплатно.


<?php

    include "html_config.php";

    include "security.php";

    include "functions.php"; 

    $header =  get_activity_html(get_content_id_by_path("start/system/html/header"));
    
    $footer =  get_activity_html(get_content_id_by_path("start/system/html/footer"));

    $inner_html = "Not any page loaded";
    if(isset($_POST["action"]) && ($_POST["action"]==="load page")) {
        
        $inner_html = main();
    
    }
    
    $html = $header.$inner_html.$footer;

    $html = str_replace("[_USER_ID_]",get_hash(),$html);

    echo  htmlspecialchars_decode($html);

?>

Нашел неточность. Кто еще найдет? Иногда у меня подозрение, что я чужие комментарии из будущего воспринимаю и выдаю потом за свои. Чтобы доказать, надо чтобы еще кто-то увидел тоже самое и сообщил мне. В будущем.

После рефакторинга ( для использования fetch javascript обновления страниц вместо php redirect ) код, который выше, изменился.


<?php

    include "html_config.php";

    include "security.php";

    include "functions.php";
    
    if( isset($_POST["action"] ) && ( $_POST["action"] === "load page" ) ) {
        
        echo main();
        return;
    
    }
    
    $header =  get_activity_html(get_content_id_by_path("start/system/html/header"));
    
    $footer =  get_activity_html(get_content_id_by_path("start/system/html/footer"));
    
    $inner_html = "<div id=\"container\">Not any page loaded</div>";
     
    $html = $header.$inner_html.$footer;

    $html = str_replace("[_USER_ID_]",get_hash(),$html);

    echo  htmlspecialchars_decode($html);

?>

Кстати, кто что думает о вреде сливания всех файлов скриптов (из разных директорий приложения) в один index.php ?

Как бы сюда прогресс бар загрузки страницы добавить?

Скажу тебе больше: кто-то печатает продолжение мысли на внутреннем экране у меня в сознании золотыми буквами. Мне остается только прочитать и перенести на бумагу или отправить через форму на форум.

facepalm.jpg
Отсыпь то, что нашел

У него так получается, без допинга.

а разве это не похоже на en.wikipedia.org/...​arest_neighbors_algorithm ?

Сформулировал значит потрудился.

Будет по одному предмету в каждом ящике, ведь у них разные порядковые номера, а критерии сравнения изначально заданы не были.

Человек умеет отличать крышечку от Кока Кола от крышечки Пепси Кола. Это два ящика будет. Для смешанного набора крышечек от этих напитков.

Человек умеет отличать крышечку от Кока Кола от крышечки Пепси Кола.

А погнуті кришечки Кока-Коли від непогнутих може?

И удивись (как когда-то я) теперь такому факту: брать два ящика — для погнутых и для не погнутых или не брать зависит от наблюдателя, то есть, от того, кто сортирует. Знаешь ведь эксперимент про две щели с наблюдателем? И около щелей наблюдатель тоже сортирует.
Это дает нам всем великую надежду...

Может все таки стоит обратится за помощью?

В мене є контакти парочки досвідчених психіатрів, але не знаю, чи допоможуть вони в цій надкліничній ситуації.

Давай объясню, как это люди делают: пытаются сожрать. Потому на большинстве игрушек написано «от 3 лет».

Сначала они просто используют. По мере приедания, привыкания растет количество применений, вплоть до невозможных. И это уже разнимание, деконструкция, анализ.
А потом из деталей бывшего целого будут происходить новые применения и даже попытки собрать заново если не все то части. И снова применять и применять. Это будет синтез.
И все это путь DIY и надо просто накопить универсальных и долговечных деталей, чтобы из них создавать необходимые композиции для всего что необходимо.
Мизера различий достаточно для максимума реализаций в условиях возможно полного перебора вариантов. У — универсализм управляемого бытия.

Твой алгоритм — производная моего алгоритма.
А мой алгоритм умещается всего в две строки:
Выполнять инструкции которые нужны для решения задачи
Не выполнять инструкции, которые не нужны для решения задачи

Критерий нужности возникает задним числом :)

Точно так как и критерий похожести

Собственно, для похожести и нужен критерий. К примеру, для маленького ребёнка не существует кошек. Для него каждая кошка уникальна. И только разобравшись, где выключаются звук и когти... это уже проблема всей остальной живности, что она похожа на кошку и не успела залезть под диван.

Как же хорошо, что мы программируем не маленького ребенка а компьютер.

Вот, а то, что сначала необходимо испытание, доказывает, что мир сотворен случайно. Никто ничего наперед знать не мог и не может. Все стохастично.
И это доказывает, что наилучший способ программирования — просто чтоб работало.

Вот теперь ты понимаешь, как я мыслю. Перечитай все мои посты — особенно те, которые тебе были непонятны. Возможно ты откроешь для себя еще больше производных.

Почему ты решил, что мне что-то непонятно?

Потому что ты меня не спонсируешь. Мы можем заработать миллионы, просто рассказывая всем подряд о том, как работать с четвертым измерением. Заметь, это всего лишь кредитование (правда беспроцентное и в некотором роде бессрочное) но когда придет моя поклажа, я всем все отдам вдвойне, да еще с учетом инфляции. Поэтому что такой принцип DIY — уменьшать зависимости.
То есть если я когда-то смогу встроить в себя термоядерный реаткор на тяжелой воде (небольшой) то и тебе встрою.

Почему ты решил, что у меня не встроен?

Помешает. Как начнешь серьезно этим заниматься — сам поймешь почему.

На что-то серьезное у меня нет возможностей. Я себя продвинул с помощью упражнений на тренажере собственной разработки «Визуальный ТРИЗ» и теперь могу мыслить очень широко — вертеть в уме идеи как узоры в этом видео www.youtube.com/watch?v=ViMImheOJbE
И кстати, это только одна развивающая программа — у меня есть еще. А вот инвесторов в «школу гениальности» нет.
А изюминка на торте — если бы я смог точно также вертеть слова — для создавания необычных соображений, мыслей, предложений и даже целых абзацев текста, которые людям просто никогда не смогут прийти в голову.
Я называю эту штуку Генератор Идей и Изобретений, которые никогда не смогут придти людям в голову.
Их функция все та же — развивать потенциал мышления.
Изготавливать креативщиков.
Поточным методом. На конвейере.

Но зачем?

Чтобы победить все эти явления распада, включая смерть. Разумное существо не должно применять тут паллиативные средства. Незачем уныло соглашаться с природой вещей, если существуют другие варианты.

Для этого надо не креативщиков плодить, а просто перенести свое сознание в более стабильный носитель.

Это лишь один из вариантов. Пусть будущие гении сами все обдумают и решат, каким именно образом натянуть Вселенной нос. А мое дело маленькое — подогнать тренажеры для мозга, оптимизирующие процессы мышления, не забывая о квантовых штучках из-за которых нам не так хорошо живется, как бы мы могли жить.
И речь идет не только о долговечности тел, но и о долговечности вещей. Ибо две этих области тесно связаны друг с другом.

Предлагаю начать с энтропии.

Ок. Вот цитата: «чем больше энтропия, тем ближе система к равновесию». Подошьем к квантовым штучкам.
Я говорю, что система стабильна, когда максимально определена. Значит с уменьшением энтропии система теряет стабильность. Теряет определенность. Размывается. Растворяется. Разуплотняется. И наконец, волновая функция такой системы становится более неопределенной, менее вероятной.

Я говорю, что система стабильна, когда максимально определена

 Но при этом как раз минимальная энтропия.

В природе — равновесие энтропии (хаоса) и энтальпии (холода). Если воду заморозить — у нее понизится энергия, и появится упорядоченность. Если воду нагреть — у нее повысится энергия и появится хаос. А посередине — не очень много хаоса, и не очень много энергии.

Если мы забираем у вещества энергию — оно упорядочивается. Если даем много энергии — оно разваливается в хаос.

В общем система пытается стать равномерно нагретой и равномерно хаотичной. Это называется тепловая смерть — тогда ничего никуда не меняется, потому что все равномерно. Конец времени.

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

Вообще-то, вторая строка лишняя. А первая наводит на неприятный вопрос о порядке выполнения инструкций. А также о критерии завершения работы и оценки результата.

Это хорошо.

А как определить, это «такой-же предмет, похожий на наш» или нет, не похожий? Исходя из определения, что человек — это двуногое без крыльев, данный «алгоритм» положит всех в один ящик. А если правда, что каждый человек неповторимая личность, то потребуется ящиков по числу народонаселения. То есть ключом служит именно процедура сравнения объектов для оценки возможности укладки их в общий ящик. Очевидно, что подставляя различные варианты такой процедуры в вышеописанный алгоритм можно получить произвольный результат классификации. Проще уж монету бросать.

Одно время я думал примерно так:
Сравниваем две точки по цвету — если обе равны между собой, значит их в один ящик. Неравны — каждой по ящику. К концу разбора у нас есть куча ящиков и никакой ссылки на то, что это за вещи. Кроме прилепленного может быть к каждому ящику идентификатора группы, формируемого псевдослучайным образом.
А потом надо написать в ДАТА СЕТ комьюнити со слезной просьбой распознать предметы.
Либо можно гвоздем попробовать забить молоток, если не получится попробовать наоборот.

То есть, смысл предмета это то, как его можно использовать и как его использовать нельзя.

Нет, смысл предмета (например, объекта в java) это то, какие он интерфейсы поддерживает.
Мы можем использовать предмет, если знаем его интерфейсы.
А если не знаем, мы должны сначала получить это знание, перед использованием.

это словарь со списком в качестве значения. на таком принципе можно строить хеш таблицы.
en.wikipedia.org/...​haining_with_linked_lists

Я это в движке применяю — у меня любые входные данные это всегда набор значений, но до выбора это множество обширное, а после выбора это множество минимальное. В случае активности чек лист, например, те чекбоксы, в которых поставят галочки это минимальное множество.
У меня в движке активности (пункты меню для выбора) так взаимодействуют:
Вначале это вертикальный список пунктов (каждый можно кликнуть)
Кликнул — значит выбрал. (создается и отправляется на сервер событие выбора)
При этом я прикрепил к каждому пункту свой presentation view — например html
Каждый автор может свой html придумать и подставить.
Дальше еще интереснее.
Сервер, получив событие, смотрит, какие привязаны исполняемые скрипты к этому событию. В скриптах есть ссылки на данные, которые надо подгрузить. Все это вместе, после вычисления пользовательских функций, формирует новые пункты для выбора.
Я добиваюсь максимальной независимости исполняемых скриптов (ИС) друг от друга.
Вот сейчас задумался о последовательном и параллельном выполнении — последовательное получается, а насчет распределенного — а оно так сильно необходимо?
Я могу запустить два независимых потока, выдать каждому по копии входных данных, а потом совместить выходные данные. Например, одновременный отбор по нескольким тегам так сделать можно.
P.S.
Кстати, теги это все наше. Колоссально удобны. Я в почте gmail их применяю.

Підписатись на коментарі