|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Yuri Burger 2:5020/400 29 May 2003 12:00:21 To : Sergiy Kanilo Subject : Re: Hечеткое сравнение строк -------------------------------------------------------------------------------- Hello, Sergiy! You wrote to Yuri Burger on Wed, 28 May 2003 17:57:33 +0000 (UTC): SK>>> безымянное namespace в данном случае практически ??>> В нем лежит вспомогательная тулза, видимостью готорой я не хочу SK> и что мешает пользователю написать SK> using namespace fuzzy; SK> compare(&a[0],&a[1],&a[0],&a[1],0,0,0,0); Сорри, гоню. А я чет думал что неименованый неймспейс внутри другого неймспейса даст видимость только в одной единице трансляции 8-\ SK>>> while(true) с последующим if()brake; и ++ для параметров в конце, ??>> инициализации, типа for(;a<b;a++) изза извращенного прочтения: для ??>> /пусто/ делать a++ пока a<b В таких случаях требуют использование ??>> while, дабы оно читалось. SK> то есть единственная причина - отсутствие инициализации? SK> с другой стороны ты сразу декларируешь, что ты будешь делать SK> с параметрами цикла, и избавляешся от длинных условий, ь.е. SK> вместо Да мне самому больше нравится for. И, имхо, даже вечные циклы легче объявлять через for(;;) чем через while(true). Hо что поделаешь, требования :) SK> даже в случае запрета на отсутствие инициализации в for, SK> вряд ли кто запретит переписать подобное как SK> while( d!=maxD && fb!=fe && sb!=se && SK> f+std::min(fe-fb,se-sb)>best) ){ SK> [...] Да, так пожалуй и меньше и понятней. SK>>> трижды встречающийся кусок lf=...; if(best<lf){best=lf;} так и SK>>> просится в инлайновую функцию ??>> Ты прав. Только не в инлайновыю функцию, а просто заменить на SK> присваивание ??>> результатом std::max. Оптимизатор должен обойти лишнее приравнивание, SK> в двух последних случаях можно просто SK> best =compare(...,best); SK> ибо compare, как я понял, может только увеличить best Точно, забыл совсем :) SK>>> static_cast<doube> - ИМХО это не то место, где стоит SK>>> его использовать ??>> Что ты предлагаешь, сишное преобразование? Одна из причин введения SK> comapre(...)*1.0/size - каст отсутствует совсем Вах, красиво :) ??>> if(d==maxD||fb==fe||sb==se||(f+std::min(fe-fb,se-sb))<=best){break;} SK> вычитание, кстати, тоже не определо для итераторов Ы? Смотрел SGI STL PG: Random Access Iterator: разность дает distance type, делать его чем то другим нежели long/int/size_t имхо, совершенно нелогично. Соответственно определено и сложение с distance type. ??>> best=std::max(best,compare(fb,fe,++t,se,d+1,maxD,of,best)); ??>> t=fb; ??>> best=std::max(best,compare(++t,fe,sb,se,d+1,maxD,of,best)); SK> мне честно сказать очень подозрительны длинные списки параметров, SK> особенно если они практически повторяются (Refactoring, "bad smell") Да яб запхал всё это в класс, но в этом случае имхо выигрыш будет невелик - слишком уж код малый, с классом будет больше и не очевидней, а неизменяющиеся аргументы оптимизатор вполне может раскрутить. SK> что если попытаться обернуть этот набор 4-х последних параметров SK> в класс, а compare сделать функцией-членом данного класса? SK> конечно это итерациионно-рекурсивные изменения отследить не SK> очень просто, но мне кажется, что и не чересчур сложно - Яж говорю, выигрышь не велик. Хотя с другой стороны, тогда можно добавить других алгоритмов для сравнения... With best regards, Yuri Burger aka J.O. Kruger. E-mail: jo_kruger@mail.ru --- ifmail v.2.15dev5 * Origin: Unknown (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/91380f984810.html, оценка из 5, голосов 10
|