2015-11-14 trade-offs / компромиси
by Vasil Kolev(и преди да съм разписал хилядите неща от openfest, нещо, което ми се мотае в главата поне от година, и което Public Choice III ми доизясни)
Нещо много фундаментално в живота (и информатиката) е trade-off-а, или компромисът. Оказва се твърде често срещан, и реално погледнато незаменим като метод за решаване на проблеми. За съжаление ще трябва да дам някаква формална дефиниция, понеже ще ми трябва надолу …
Прост пример за компромис е да имаме някакви пари N и двама човека, A и B. Нека да имаме функция U(P, X), която за P ∈ {A, B} и 0 < X < N може да ни даде някаква “полезност” на свършеното от човека, като целта ни е да максимизираме U(A, X) + U(B, N-X). Безкомпромисните решения са X=N или X=0 (т.е. да дадем всичко само на единия), всичко останало е някакъв компромис м/у тях, за да се получи по-добър резултат.
(моля също така да се консултирате с вица за сферичния кон във вакуум, преди да продължите)
Повечето технически проблеми включват някакъв вид trade-off, за да се решат, дори има стандартен такъв термин, time-memory trade-off за всякакви алгоритми и решения, т.е. принципът, че с повече памет (поне до едно време) може да се спести време. Един сравнително прост пример, който ми хрумва е lookup дали даден IP адрес е блокиран или не – това може да се реализира с:
– прост масив – яде малко памет, търси се линейно и като цяло е бавен;
– хеш – яде повече памет, търси се константно (worst-case – линейно) и е по-бърз;
– дърво – яде още повече памет, търси се логаритмично, и
– bitmap – един масив от 2^26 байта, в който всеки бит отговаря на отделен адрес, който яде много памет и в който lookup-а е константен.
Когато за някой проблем може да се максимизира всичко и да се постигне ситуация “и вълкът сит, и агнето цяло”, техническият термин за решението е “hack” и е любим на всички ни.
Проблемът е, че няма hack за всичко, и реално всички организации, действия и решения, които включват други хора изискват някакъв тип компромис. Живеейки в свят, в който сферичните коне (особено във вакуум) са рядкост, се налага да правим доста такива, за да постигнем каквото и да е. Може да се каже, че цялото ни общество се крепи на компромисите.
А хората не харесват компромиси. Явно някъде ни е заложено, че трябва да стане нашето и хората по принцип дърпат в собствената си посока, като отпускането в чуждата рядко се приема като нещо хубаво, като загуба и отстъпление от собствените принципи. Поради това много компромиси не издържат с времето и се налага или да се преразглеждат, или да се разпаднат.
Никак не помага и това, че няма как да се оцени един компромис, като с функцията по-горе. Тия дни във връзка с openfest ми беше зададен (съвсем хипотетичния) въпрос – дали не е по-добре да се направи една лекция, която е много полезна и информативна, за 50 човека, отколкото една по-малко информативна (с базови неща и т.н.) за 1000 човека. На такъв въпрос смислен отговор няма, начинът да се разбере е да се проведат, да се направи изследване след това м/у хората по някакъв начин (например колко пари биха дали за една такава лекция), да се сумират нещата, да се сравнят, и после да осъзнаем, че принципът на икономистите не води до особено смислени неща и да зарежем упражнението.
Също така има хора, които много трудно приемат компромисите с каквото и да било. Така много често се изпада в ситуация, в която нищо не може да се свърши заради един блокиращ индивид (какъвто случай ми разказваха наскоро), и където липсата на желание/способност за компромис и нежеланието да се търси hack водят до всякакви проблеми (или неслучващи се неща).
(от друга страна, полезността на тези хора за някои неща не може да се отрече, та се налага да се прави компромис с безкомпромисните понякога :) )
Та, накратко, life sucks, and then you die. Единственото смислено нещо, което виждам да може да се направи е да се мисли метод, който без да обижда хората да може да оценява компромисите и да може да се смята как точно да се направи един компромис. От друга страна, не мисля, че е особено възможно и се надявам някой да покаже, че не съм прав :)
Tags: крокодилски, политика
November 14th, 2015 at 16:10
в политиката и държавното управление вместо хак се използва думата утопия и нейното преследване и неразбиране на това което описваш за компромисите никога не води до нищо добро. когато си втълпиш че това което си си наумил е съвършено правилно тогава тия които не мислят като теб почваш да ги мислиш за съвършено погрешни и излишни…
November 14th, 2015 at 16:22
@longanglon, не, неприемането на компромиса е утопията, hack-а е от нещата, за които се чудим как не са ни хрумнали. Като за пример ще дам https://en.wikipedia.org/wiki/Ignaz_Semmelweis или как нещо съвсем тривиално решава дилемата дали да раждаш у вас или в болницата и разните там шансове да умреш.
Hack-овете са много, много редки, за съжаление.
November 16th, 2015 at 14:35
“Така много често се изпада в ситуация, в която нищо не може да се свърши заради един блокиращ индивид (какъвто случай ми разказваха наскоро), и където липсата на желание/способност за компромис и нежеланието да се търси hack водят до всякакви проблеми (или неслучващи се неща).”
Това далеч не е така. Тази ситуация е валидна когато “Вие просто не умеете да ги готвите”. Много рядко хората са твърди фанатици (и тогава обикновено просто ги заобикалят), обикновено просто трябва да им се предложи нещо или добро или лощо, в зависимост от желанието и възможности. Класическото “морков отпред или същия отзад”.
November 16th, 2015 at 14:45
@ceci_, да, възможно е :) Просто може да се окаже, че tradeoff-а в тяхна посока е твърде голям, или времето за целта просто го нямаме :) Вероятно всеки може да бъде убеден, но не е ясно дали ще стане преди топлинната смърт на вселената.
November 19th, 2015 at 13:13
Хеша се “обхожда” линейно (както и другите структури, които си написал), но в него се търси за константно време (амортизирано). Няма логаритми никъде.
November 19th, 2015 at 13:20
@Стефан Кънев, според реалния свят не е съвсем така: https://lwn.net/Articles/474912/ . “Амортизираното” време не е хубава мярка :)
November 19th, 2015 at 17:33
> @Стефан Кънев, според реалния свят не е съвсем така: https://lwn.net/Articles/474912/ . “Амортизираното” време не е хубава мярка :)
Всъщност, точно това значи “амортизирано” :) . Пък и тук проблема е в предвидимост на хеш сумите на user input, не tradeoff в самата структура.