Простий спосіб довести, що цей алгоритм зрештою припиняється


10

Вступ та позначення:

Ось нова і проста версія мого алгоритму, яка, здається, припиняється (згідно моїх експериментів), і тепер я хотів би це довести.

Нехай позначення посилається на розмірну точку даних (вектор). У мене є три множини A, B і C, такі, що , , : xiRpp|A|=n|B|=m|C|=l

A={xi|i=1,..,n}
B={xj|j=n+1,..,n+m}
C={xu|u=n+m+1,..,n+m+l}

З огляду на , нехай Позначимо середнє евклідова відстань від його найближчої точки в ; і позначають середній евклідова відстань від його найближчої точки в .kNdxiAxikAdxiCxikC

Алгоритм:

У мене є наступний алгоритм, який ітеративно змінює множини A і B, переміщуючи деякі вибрані елементи з A в B і навпаки, і C залишається завжди однаковим (не змінювати). Щоб спростити: мета алгоритму полягає в тому, щоб краще розділити множини і таким чином, щоб "точки були більш схожі на ті, що знаходяться у відомому фіксованому множині " і "точки , нарешті, є самоподібними і далі від і остаточного набору ":ABBCACB

  • A={xiAdxiA>dxiC} ... (1)
  • A=AA ; ... (2)B=BA
  • B={xiBdxiA<dxiC } ... (3)
  • B=BB ; ... (4)A=AB
  • Повторюйте (1), (2), (3) і (4), поки: (жоден елемент не рухається від до або від до , тобто A 'і B' стають порожніми) або ( або )ABBA|A|k|B|k

Алгоритм припиняється у двох випадках:

  • колиабостає менше або дорівнює|A||B|k
  • або самий стандартний випадок, коли , це означає, що більше A елементів не рухається між A і B.A=B=

Питання:

Як довести, що цей алгоритм зрештою припиняється? Я не знайшов зручну потенційну функцію, яку алгоритмом можна суворо мінімізувати або максимально збільшити. Я безуспішно намагався виконувати деякі функції: функцію але вона не збільшується при кожній ітерації. Функція але вона не зменшується при кожній ітерації. Функція схоже, не зменшується при кожній ітерації. ФункціяxAdxC+xBdxAxAdxA+xBdxCxAdxA+xBdxBxAdxB+xBdxAсхоже, не збільшується при кожній ітерації. Отже, яка зручна потенційна функція, яку можна показувати або збільшувати, або зменшувати при кожній ітерації? Або ми повинні показати, що функція зменшується, але не при кожній ітерації (швидше після деяких ітерацій)? Як?

Примітки:

  • найближчим точкам для в безлічі , означає: точок (інші , ніж ) в , що має найменшу евклідова відстань до . Ви можете просто взяти для спрощення аналізу.kxSkxSxk=1
  • Я не знаю, чи це може допомогти чи ні, але для моїх початкових множин є наступне властивість : спочатку , якщо найближча точка до і - найближча точка до тоді завжди . Це інтуїтивно означає , що точки в знаходяться ближче до , ніж в точках .A,B,CxiB,xjAxbCxixaCxjdistance(xi,xb)<distance(xj,xa)BCA
  • Якщо це полегшує аналіз: цілком можливо розглянути дещо інший варіант алгоритму, коли, як тільки точка з повинна бути переміщена до , вона переміщується з в (не проходячи ), і Vis Versa для .ABABAB

3
Чому вас цікавить саме цей алгоритм?

1
shna: Що ти хочеш зробити зі збіркою очок, довільно розділених на три набори?

4
@shna Знання мети та мети алгоритму може призвести до поліпшення інтуїції, а отже, допоможе проблемі.

@RichardRast Щоб зробити пояснення простим: мета полягає в тому, щоб краще розділити множини і таким чином, щоб "точки були більш схожі на ті, що знаходяться у відомому фіксованому множині " і "точки нарешті є подібними до далі від та остаточного набору ". ABBCACB
шн

Міграція до теорії знижувалася.

Відповіді:


2

Ось рішення для випадку :k=1

Припустимо, алгоритм не припиняється. Оскільки існує кінцева кількість станів алгоритму (присвоєння точок і ), стан алгоритму повинен повторюватися за циклом. Оскільки цикл проходить через різні стани, повинна існувати точка, яка перемикається між і нескінченно часто.ABAB

Нехай - точка, яка перемикається нескінченно часто в цьому циклі. Pick першої ітерації алгоритму в протягом циклу , в протягом якого перемикається від до . Щоб переходило на , повинно бути принаймні одна точка в , з . Довільно виберіть найменшу розмічену таку точку; визначимо функцію так, щоб . Зауважте, що також повинен перемикатися між і нескінченно часто (адже якщо залишився вxxBAxAxAdxC>dist(x,x)ff(x)=xxABxAпостійно, так би ), тому ми можемо взяти тощо.xf(f(x)),f(f(f(x))),

Оскільки у нас є кінцева кількість точок, ітерати f повинні врешті повторюватися: для деякого . Тепер подивіться на відповідні послідовності відстаней від C: . Оскільки вона повторюється, ця послідовність не може бути рівномірно зменшена. Має бути ітерація такою, щоfn(x)=fm(x)m>ndf(x)C,df2(x)C,...dfn(x)C,...odfo1(x)Cdfo(x)C

Тепер і досить близькі один до одного, щоб викликати один одного в , якщо один з них є. Тобто вони ближче один до одного, ніж будь-який з них - до : (із визначення )fo1(x)fo(x)ACdfo(x)Cdfo1(x)C>dist(fo1(x),fo(x))f

Отже, як тільки і знаходяться в , вони будуть тримати один одного в назавжди (див. Рядки 1-2 алгоритму). Це суперечить тому, що всі ітерати повинні перемикати множини нескінченно часто. Таким чином, для випадку, коли , алгоритм припиняється.f o ( x ) A A f k = 1fo1(x)fo(x)AAfk=1


Це якось складно і може бути показано лише для . Швидше, це набагато краще, якщо ми можемо отримати потенційну функцію, яка може бути показана, що вона збільшується або зменшується при кожній ітерації. Або те, що може бути показано, що воно збільшується або зменшується після "деяких" ітерацій, а не 1.k=1
shn

1
@shn Я не впевнений, чому ти критикуєш вибір методики перевірки того, хто досяг успіху у вирішенні твоєї проблеми, ніж ти. Особливо, коли у вашому власному запитанні перелічено чотири невдалі спроби використання бажаної методики.
Девід Річербі

1
@DavidRicherby Я не критикую;) Я насправді обговорював це рішення з "причиною" (хто дав цю відповідь) на IRC, і ми виявили, що це неможливо довести таким чином для ; тому ми зробили висновок, що набагато краще, якщо ми можемо отримати потенційну функцію, яка може бути зменшена при кожній ітерації. Мій коментар був просто інформативним. k>1
шн
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.