|
Лишние NOP в ассемблерном коде |
|
|
|
 |
Ответов
|
Nov 27 2007, 12:26
|
Частый гость
 
Группа: Новичок
Сообщений: 84
Регистрация: 4-09-07
Из: Москва
Пользователь №: 30 277

|
Цитата(qxov @ Nov 26 2007, 22:07)  Не знаю, на сколько этот вариант подходит:
если min(abs(дельта яркости окрестных точек))>(thresoldHi-thresoldLo), то новая область; иначе - точка относится к области, соответствующей одной из min(abs(дельта яркости окрестных точек)) Вообще-то интересный вариант. Не понятно только как начинать разметку изображения, когда ещё никаких областей нет? А чем вообще обусловлен вопрос - этот вариант проще?
|
|
|
|
|
Nov 28 2007, 06:07
|

Частый гость
 
Группа: Свой
Сообщений: 86
Регистрация: 22-03-07
Из: Санкт-Петербург
Пользователь №: 26 406

|
Цитата(Degun @ Nov 27 2007, 15:26)  Вообще-то интересный вариант. Не понятно только как начинать разметку изображения, когда ещё никаких областей нет? А чем вообще обусловлен вопрос - этот вариант проще? Начинать просто - первому пикселу задаем какой-то номер области и от этого пляшем. Вариант значительно проще - в том алгоритме, который используется сейчас, это так или иначе все равно делается, но помимо этих расчетов еще куча других присутствует. Если данная схема позволит полчить удовлетворительные результаты, то, наверное, лучше копать в этом направлении. Разумеется, потом все равно придется как-то перенумеровывать области точек. Хотя, если предположить, что исходная картинка такова, что при сканировании ее по строкам и задания областей не может возникнуть случая, подобного Код ..11..22.. ...11.2... ....11.... либо допускается, что области, содержащие точки, скорее относящиеся к одинаковым модам, соприкасаются, не объединяясь при этом в одну, то алгоритм можно упростить до безумия
|
|
|
|
|
Dec 6 2007, 17:40
|
Частый гость
 
Группа: Новичок
Сообщений: 84
Регистрация: 4-09-07
Из: Москва
Пользователь №: 30 277

|
Цитата(qxov @ Nov 28 2007, 09:07)  Начинать просто - первому пикселу задаем какой-то номер области и от этого пляшем. Вариант значительно проще - в том алгоритме, который используется сейчас, это так или иначе все равно делается, но помимо этих расчетов еще куча других присутствует. Если данная схема позволит полчить удовлетворительные результаты, то, наверное, лучше копать в этом направлении. Разумеется, потом все равно придется как-то перенумеровывать области точек. Хотя, если предположить, что исходная картинка такова, что при сканировании ее по строкам и задания областей не может возникнуть случая, подобного Код ..11..22.. ...11.2... ....11.... Такие случаи, к сожалению, встречаются и довольно часто. Так, что без перенумеровывания, по-видимому, не обойтись. Цитата(qxov @ Nov 28 2007, 09:07)  либо допускается, что области, содержащие точки, скорее относящиеся к одинаковым модам, соприкасаются, не объединяясь при этом в одну, то алгоритм можно упростить до безумия  Так тоже не честно. В этом суть алгоритма разметки на области.
|
|
|
|
|
Dec 7 2007, 06:20
|

Частый гость
 
Группа: Свой
Сообщений: 86
Регистрация: 22-03-07
Из: Санкт-Петербург
Пользователь №: 26 406

|
Цитата(Degun @ Dec 6 2007, 20:40)  Такие случаи, к сожалению, встречаются и довольно часто. Так, что без перенумеровывания, по-видимому, не обойтись.
Так тоже не честно. В этом суть алгоритма разметки на области. Я уже потом подумал, что, наверное, схема с разметкой по превышению порога изменения яркости будет работать плохо - нужна высокая контрастность соседних точек, иначе все одной областью заполнится тупо.
|
|
|
|
|
Feb 1 2008, 12:43
|
Частый гость
 
Группа: Новичок
Сообщений: 84
Регистрация: 4-09-07
Из: Москва
Пользователь №: 30 277

|
Вот такой у меня получился код для DSP. Но для изображения размером 640*480 пикселей он выполняется за 85 мсек, что много. Что здесь можно ещё оптимизировать? Код #include <stdlib.h> #include <string.h> #include <csl_dat.h>
//Максимальное кол-во областей в изображении #define MAX_AREAS 1000 //Максимальная ширина изображения #define IMG_WIDTH_MAX 640 //Максимальная высота изображения #define IMG_HEIGHT_MAX 480 //Макросы минимума и максимума #define max(a, b) (((a) > (b)) ? (a) : (b)) #define min(a, b) (((a) < (b)) ? (a) : (b))
//Счётчики количества областей в изображении и в контейнере static int iAreasCount=0, iAreasInfoCount=0;
//Ограниченные массивы структур описателей областей!!! static short AreasMode[MAX_AREAS+1]; static short AreasNumber[MAX_AREAS+1];
//Функция создания новой области static inline int AddNewAreaInfo(const int iModeNumb) { // if (iAreasInfoCount>=MAX_AREAS) return -1; iAreasCount++; AreasMode[iAreasInfoCount]=iModeNumb; AreasNumber[iAreasInfoCount]=-1; return iAreasInfoCount++; }
// Буферы для кэширования строк изображения static unsigned char ImageBuf[3][IMG_WIDTH_MAX]; static int AreasBuf[2][IMG_WIDTH_MAX];
int test_SplitImage2Areas( register unsigned char ** restrict Image, register int Height, register int Width, register short * restrict ModeNumb4Pix, register int ** restrict Areas) { //Изображение последовательно просматривается по строкам //для отнесения каждого пиксела к определённой области //Вычисление площади, занимаемой каждой областью и модой register int iPrevAreaNumbL=-1; //Номер области предыдущей левой точки register int iPrevModeNumbL=-1; //Номер моды предыдущей левой точки register int iPrevAreaNumbU=-1; //Номер области предыдущей верхней точки register int iPrevModeNumbU=-1; //Номер моды предыдущей верхней точки register int iPrevAreaNumbUL=-1; //Номер области предыдущей верхней левой точки register int iPrevModeNumbUL=-1; //Номер моды предыдущей верхней левой точки register int iPrevAreaNumbUR=-1; //Номер области предыдущей верхней правой точки register int iPrevModeNumbUR=-1; //Номер моды предыдущей верхней правой точки //Временные переменные register int i, y, x, iSrcIndex, iDstIndex, iDelta, iTmp; register int iCurrPixel, iCurrAreaNumb, iCurrModeNumb; register Uint32 id_LoadTransfer, id_SaveTransfer; register int iImageBufIndex, iAreasBufIndex; register unsigned char * restrict pImageCurrBuf; register unsigned char * restrict pImagePrevBuf; register int * restrict pAreasCurrBuf; register int * restrict pAreasPrevBuf;
//Проверка корректности входных параметров if ((Image==0)||(ModeNumb4Pix==0)||(Areas==0)) return -1; if ((Width<=0)||(Height<=0)||(Width>IMG_WIDTH_MAX)||(Height>IMG_HEIGHT_MAX)) return -1;
//Загрузка первой строки изображения id_LoadTransfer=DAT_copy(Image[0], ImageBuf[0], Width);
//Обнуление счётчиков кол-ва областей iAreasCount=iAreasInfoCount=0; //Обработка верхней левой точки изображения iCurrPixel=Image[0][0]; iCurrModeNumb=ModeNumb4Pix[iCurrPixel]; if (iCurrModeNumb<0) { //Сканирование зигзагом окрестных точек для //выявления ближайшей с установленной модой iDelta=min(Width,Height); for (i=1; i<iDelta; i++) { iSrcIndex=-1; for (y=i, x=0; y>=0; y--, x++) { iDstIndex=Image[y][x]; iTmp=ModeNumb4Pix[iDstIndex]; if (iTmp<0) continue; iDstIndex=abs(iDstIndex-iCurrPixel); if ((iSrcIndex<0)||(iSrcIndex>iDstIndex)) { iSrcIndex=iDstIndex; iCurrModeNumb=iTmp; } } //Нашли подходящую точку - выход из поиска if (iCurrModeNumb>=0) break; } //Если точек нет, то нулевая мода if (iCurrModeNumb<0) iCurrModeNumb=0; } iCurrAreaNumb=AddNewAreaInfo(iCurrModeNumb); AreasBuf[0][0]=iCurrAreaNumb; //Указатель на текущую обрабатываемую строку изображения pImageCurrBuf=ImageBuf[0]; //Указатель на текущую результирующую строку номеров областей pAreasCurrBuf=AreasBuf[0]; //Ожидание окончания загрузки первой строки изображения while(DAT_busy(id_LoadTransfer)); //Запуск загрузки второй строки изображения id_LoadTransfer=DAT_copy(Image[1], ImageBuf[1], Width); //Обработка первой верхней строки изображения, //начиная со второго пиксела строки for (x=1; x<Width; x++) { //Запоминание номера области и моды для левой точки iPrevAreaNumbL=iCurrAreaNumb; iPrevModeNumbL=iCurrModeNumb; //Номер моды текущей точки iCurrModeNumb=ModeNumb4Pix[pImageCurrBuf[x]]; //В зависимости от наличия моды if (iCurrModeNumb<0) { iCurrModeNumb=iPrevModeNumbL; iCurrAreaNumb=iPrevAreaNumbL; } else if (iCurrModeNumb==iPrevModeNumbL) { iCurrAreaNumb=iPrevAreaNumbL; } else { //Добавление новой области iCurrAreaNumb=AddNewAreaInfo(iCurrModeNumb); } //Установка номера области текущей точки pAreasCurrBuf[x]=iCurrAreaNumb; } //Сохранение первой строки результата id_SaveTransfer=DAT_copy(AreasBuf[0], Areas[0], Width); //установка кольцевого указателя на буфер текущей строки iImageBufIndex=iAreasBufIndex=1; //Декремент ширины изображения для увеличения скорости обработки Width--; //Цикл по всем точкам изображения for (y=1; y<Height; y++) { //Сохранение указателя на предыдущую строку изображения pImagePrevBuf=pImageCurrBuf; //Сохранение указателя на предыдущую строку результата pAreasPrevBuf=pAreasCurrBuf; //Указатель на текущую строку изображения pImageCurrBuf=ImageBuf[iImageBufIndex]; //Указатель на текущую строку результата pAreasCurrBuf=AreasBuf[iAreasBufIndex]; //Продвижение индекса на следующую строку iImageBufIndex++; iImageBufIndex%=3; iAreasBufIndex++; iAreasBufIndex%=2; //Ожидание окончания загрузки текущей строки изображения while(DAT_busy(id_LoadTransfer)); //Запуск загрузки следующей строки изображения id_LoadTransfer = DAT_copy(Image[y+1], ImageBuf[iImageBufIndex], Width); //Установка начального значения для верхней левой точки iPrevAreaNumbUL=pAreasPrevBuf[0]; iPrevModeNumbUL=AreasMode[iPrevAreaNumbUL]; //Установка начального значения для верхней точки iPrevAreaNumbU=pAreasPrevBuf[1]; iPrevModeNumbU=AreasMode[iPrevAreaNumbU]; //Значение яркости первого пикселя строки iCurrPixel=pImageCurrBuf[0]; //Значение моды первого пикселя строки iPrevModeNumbL=ModeNumb4Pix[iCurrPixel]; //В зависимости от признака переходности пиксела if (iPrevModeNumbL<0) { if (abs(iCurrPixel-pImagePrevBuf[0])<abs(iCurrPixel-pImagePrevBuf[1])) { iPrevModeNumbL=iPrevModeNumbUL; iPrevAreaNumbL=iPrevAreaNumbUL; } else { iPrevModeNumbL=iPrevModeNumbU; iPrevAreaNumbL=iPrevAreaNumbU; } } else if (iPrevModeNumbL==iPrevModeNumbUL) iPrevAreaNumbL=iPrevAreaNumbUL; //Верхняя левая точка else if (iPrevModeNumbL==iPrevModeNumbU) iPrevAreaNumbL=iPrevAreaNumbU; //Верхняя точка else { //Добавление новой области iPrevAreaNumbL=AddNewAreaInfo(iPrevModeNumbL); } //Установка номера области первого пиксела строки pAreasCurrBuf[0] = iPrevAreaNumbL; //Обработка очередной строки изображения for (x=1; x<Width; x++) { //Определение параметров верхней правой точки iPrevAreaNumbUR=pAreasPrevBuf[x+1]; iPrevModeNumbUR=AreasMode[iPrevAreaNumbUR]; //Значение яркости текущего пикселя iCurrPixel=pImageCurrBuf[x]; //Номер моды текущей точки iCurrModeNumb=ModeNumb4Pix[iCurrPixel]; //В зависимости от того является ли точка переходной if (iCurrModeNumb<0) { //Текущая точка является переходной к любой области //Перебор всех точек окрестности и выбор наиболее близкой области //Левая точка iDelta=abs(pImageCurrBuf[x-1]-iCurrPixel); iCurrAreaNumb=iPrevAreaNumbL; iCurrModeNumb=iPrevModeNumbL; //Верхняя точка iTmp=abs(pImagePrevBuf[x]-iCurrPixel); if (iDelta>iTmp) { iDelta=iTmp; iCurrAreaNumb=iPrevAreaNumbU; iCurrModeNumb=iPrevModeNumbU; } //Верхняя левая точка iTmp=abs(pImagePrevBuf[x-1]-iCurrPixel); if (iDelta>iTmp) { iDelta=iTmp; iCurrAreaNumb=iPrevAreaNumbUL; iCurrModeNumb=iPrevModeNumbUL; } //Верхняя правая точка iTmp=abs(pImagePrevBuf[x+1]-iCurrPixel); if (iDelta>iTmp) { iDelta=iTmp; iCurrAreaNumb=iPrevAreaNumbUR; iCurrModeNumb=iPrevModeNumbUR; } } //Эта точка не является переходной ни к одной из мод //Просмотр всех соседних уже размеченных ранее точек //для возможного определения номера области текущей точки else if (iCurrModeNumb==iPrevModeNumbL) iCurrAreaNumb=iPrevAreaNumbL; //Левая точка else if (iCurrModeNumb==iPrevModeNumbUL) iCurrAreaNumb=iPrevAreaNumbUL; //Верхняя левая точка else if (iCurrModeNumb==iPrevModeNumbU) iCurrAreaNumb=iPrevAreaNumbU; //Верхняя точка else if (iCurrModeNumb==iPrevModeNumbUR) iCurrAreaNumb=iPrevAreaNumbUR; //Верхняя правая точка else { //Добавление новой области iCurrAreaNumb=AddNewAreaInfo(iCurrModeNumb); } //Установка номера области текущей точки pAreasCurrBuf[x] = iCurrAreaNumb; //Сканирование верхней правой точки для добавления её в список соседних областей if ((iCurrModeNumb==iPrevModeNumbUR)&&(iCurrAreaNumb!=iPrevAreaNumbUR)) { //Всего четыре возможных варианта if (AreasNumber[iCurrAreaNumb]<0) { if (AreasNumber[iPrevAreaNumbUR]>=0) { //Только добавляется ссылка на ссылочную область AreasNumber[iCurrAreaNumb]=AreasNumber[iPrevAreaNumbUR]; //Декремент кол-ва областей iAreasCount--; } else { //Обе области являются доменными iTmp=min(iCurrAreaNumb,iPrevAreaNumbUR); AreasNumber[iCurrAreaNumb]=iTmp; AreasNumber[iPrevAreaNumbUR]=iTmp; //Декремент кол-ва областей iAreasCount--; } } else //if (AreasNumber[iCurrAreaNumb]>=0) { if (AreasNumber[iPrevAreaNumbUR]<0) { //Только добавляется ссылка на ссылочную область AreasNumber[iPrevAreaNumbUR]=AreasNumber[iCurrAreaNumb]; //Декремент кол-ва областей iAreasCount--; } else { iSrcIndex=AreasNumber[iCurrAreaNumb]; iDstIndex=AreasNumber[iPrevAreaNumbUR]; if (iSrcIndex!=iDstIndex) { //Это самый трудоёмкий случай. //Но, к счастью, самый редкий! //Необходимо объединить две области if (iSrcIndex<iDstIndex) { //Обмен значениями iTmp=iSrcIndex; iSrcIndex=iDstIndex; iDstIndex=iTmp; } for (i=0; i<iAreasInfoCount; i++) { if (AreasNumber[i]==iSrcIndex) AreasNumber[i]=iDstIndex; } //Декремент кол-ва областей iAreasCount--; } } } } //Запоминание номера области и моды для левой точки iPrevAreaNumbL=iCurrAreaNumb; iPrevModeNumbL=iCurrModeNumb; //Запоминание номера области и моды для верхней левой точки iPrevAreaNumbUL=iPrevAreaNumbU; iPrevModeNumbUL=iPrevModeNumbU; //Запоминание номера области и моды для верхней точки iPrevAreaNumbU=iPrevAreaNumbUR; iPrevModeNumbU=iPrevModeNumbUR; } //Значение яркости последнего пикселя строки iCurrPixel=pImageCurrBuf[Width]; //Значение моды последнего пикселя строки iCurrModeNumb=ModeNumb4Pix[iCurrPixel]; //В зависимости от наличия моды if (iCurrModeNumb<0) { //Левая точка iDelta=abs(pImageCurrBuf[x-1]-iCurrPixel); iCurrAreaNumb=iPrevAreaNumbL; iCurrModeNumb=iPrevModeNumbL; //Верхняя левая точка iTmp=abs(pImagePrevBuf[x-1]-iCurrPixel); if (iDelta>iTmp) { iDelta=iTmp; iCurrAreaNumb=iPrevAreaNumbUL; iCurrModeNumb=iPrevModeNumbUL; } //Верхняя точка iTmp=abs(pImagePrevBuf[x]-iCurrPixel); if (iDelta>iTmp) { iDelta=iTmp; iCurrAreaNumb=iPrevAreaNumbU; iCurrModeNumb=iPrevModeNumbU; } } else if (iCurrModeNumb==iPrevModeNumbL) iCurrAreaNumb=iPrevAreaNumbL; //Левая точка else if (iCurrModeNumb==iPrevModeNumbUL) iCurrAreaNumb=iPrevAreaNumbUL; //Верхняя левая точка else if (iCurrModeNumb==iPrevModeNumbU) iCurrAreaNumb=iPrevAreaNumbU; //Верхняя правая точка else { //Добавление новой области iCurrAreaNumb=AddNewAreaInfo(iCurrModeNumb); } //Установка номера области последнего пикселя строки pAreasCurrBuf[Width]=iCurrAreaNumb; //Ожидание окончания сохранения результата while(DAT_busy(id_SaveTransfer)); //Сохранение строки результата id_SaveTransfer=DAT_copy(pAreasCurrBuf, Areas[y], Width); } //Восстановление исходной ширины изображения Width++;
//Упорядочивание переадресации областей (именно здесь)!!!!! for (i=0; i<iAreasInfoCount; i++) { //Номер кластера для текущей области iTmp=AreasNumber[i]; //Пропуск кластерных областей if (iTmp<0) //Установка номера области AreasNumber[i]=i; else //Выключение области AreasMode[i]=-1; }
//Могут оставаться независимые области с индексами больше iAreasCount for (iDstIndex=0, iSrcIndex=iAreasCount; iSrcIndex<iAreasInfoCount; iSrcIndex++) { //Если эта область уже переадресована - все нормально if (AreasMode[iSrcIndex]<0) continue; //Поиск индекса для переадресации for (/*задаётся вовне*/; iDstIndex<iAreasCount; iDstIndex++) if (AreasMode[iDstIndex]<0) break; //Сохранение указателя на моду AreasMode[iDstIndex]=AreasMode[iSrcIndex]; //Выключение переадресуемой области AreasMode[iSrcIndex]=-1; //Установка ссылки данной области на переадресованную AreasNumber[iSrcIndex]=iDstIndex; //Замена всех ссылок на эту область!!!!!!!! for (i=0; i<iAreasInfoCount; i++) if (AreasNumber[i]==iSrcIndex) AreasNumber[i]=iDstIndex; }
//Загрузка первой строки номеров областей id_LoadTransfer=DAT_copy(Areas[0], AreasBuf[0], Width); //Установка кольцевого указателя iAreasBufIndex=0; //Начальная инициализация идентификатора канала сохранения id_SaveTransfer=DAT_XFRID_WAITNONE; //Обработка всех строк for (y=0; y<Height; y++) { //Указатель на текущую строку результата pAreasCurrBuf=AreasBuf[iAreasBufIndex]; //Продвижение индекса на следующую строку iAreasBufIndex^=1; //Ожидание окончания загрузки текущей строки изображения while(DAT_busy(id_LoadTransfer)); //Запуск загрузки следующей строки изображения id_LoadTransfer=DAT_copy(Areas[y+1], AreasBuf[iAreasBufIndex], Width); //Переписывание индексов удалённых областей на переназначенные for (x=0; x<Width; x++) pAreasCurrBuf[x]=AreasNumber[pAreasCurrBuf[x]]; //Ожидание окончания сохранения результата while(DAT_busy(id_SaveTransfer)); //Сохранение строки результата id_SaveTransfer=DAT_copy(pAreasCurrBuf, Areas[y], Width); } //Ожидание окончания сохранения результата while(DAT_busy(id_SaveTransfer));
return iAreasCount; }
Сообщение отредактировал Degun - Feb 1 2008, 12:45
|
|
|
|
Сообщений в этой теме
Degun Лишние NOP в ассемблерном коде Oct 23 2007, 11:54 fontp Цитата(Degun @ Oct 23 2007, 15:54) Code C... Oct 23 2007, 12:04 Degun Цитата(fontp @ Oct 23 2007, 16:04) Это не... Oct 23 2007, 12:15  fontp Цитата(Degun @ Oct 23 2007, 16:15) А разв... Oct 23 2007, 12:28  Edmundo Цитата(Degun @ Oct 23 2007, 16:15) Не сов... Oct 24 2007, 12:36   Degun А вообще можете посоветовать:
1. каких правил или ... Oct 24 2007, 19:24    Degun Что можно сделать или оптимизировать в функции ниж... Oct 26 2007, 12:06     fontp Неприятный какой алгоритм, сплошные условные опера... Oct 26 2007, 12:40      Degun Как известно у TI C6000-го семейства 8 конвейеров.... Oct 30 2007, 20:12       Edmundo Цитата(Degun @ Oct 30 2007, 23:12) Как из... Oct 30 2007, 20:32        Degun Цитата(Edmundo @ Oct 30 2007, 23:32) Куча... Oct 31 2007, 06:29         fontp Цитата(Degun @ Oct 31 2007, 09:29) Если ц... Oct 31 2007, 08:42          Degun Цитата(fontp @ Oct 31 2007, 11:42) Ну, он... Oct 31 2007, 19:50           fontp Цитата(Degun @ Oct 31 2007, 22:50) А есть... Oct 31 2007, 20:20            Degun Цитата(fontp @ Oct 31 2007, 23:20) Короче... Nov 7 2007, 19:59             fontp Цитата(Degun @ Nov 7 2007, 22:59) Что-то ... Nov 8 2007, 07:33             vadkudr Цитата(Degun @ Nov 8 2007, 04:59) Что-то ... Nov 20 2007, 13:33             SIA Цитата(Degun @ Nov 7 2007, 22:59) Что-то ... Mar 17 2008, 17:09     qxov Цитата(Degun @ Oct 26 2007, 16:06) Что мо... Nov 16 2007, 10:07      Degun Цитата(qxov @ Nov 16 2007, 13:07) Я хотел... Nov 16 2007, 13:08       qxov Цитата(Degun @ Nov 16 2007, 16:08) Задача... Nov 16 2007, 21:53        Degun Цитата(qxov @ Nov 17 2007, 00:53) Вот пло... Nov 17 2007, 10:54       qxov Цитата(Degun @ Nov 16 2007, 16:08) Алгори... Nov 18 2007, 13:15        qxov Как успехи? Вот, набросал на коленке кусочек. Може... Nov 19 2007, 20:42        Degun Цитата(qxov @ Nov 17 2007, 00:53) Вот так... Nov 20 2007, 17:38 mdmitry Возможно оффтор! В MATLAB ImageProcessing Tool... Nov 18 2007, 11:09 Degun Уважаемый qxov я сделал вашу функцию calcModes с п... Nov 22 2007, 14:13 qxov Цитата(Degun @ Nov 22 2007, 17:13) Уважае... Nov 22 2007, 14:49 qxov А можно ли считать, что за пределами кадра есть ра... Nov 22 2007, 20:00 Degun Цитата(qxov @ Nov 22 2007, 23:00) А можно... Nov 23 2007, 11:58  qxov Цитата(Degun @ Nov 23 2007, 14:58) Да впо... Nov 23 2007, 12:50   Degun Цитата(qxov @ Nov 23 2007, 15:50) Точно 7... Nov 25 2007, 17:44    qxov Цитата(Degun @ Nov 25 2007, 20:44) Точно ... Nov 26 2007, 07:41     Degun Цитата(qxov @ Nov 26 2007, 10:41) Я в DSP... Nov 26 2007, 12:19 Николай Z Цитата(Degun @ Oct 23 2007, 14:54) Code C... Dec 6 2007, 23:23 qxov Очень тяжелый вложенный цикл. Нужно рассмотреть во... Feb 13 2008, 10:16 Degun Цитата(qxov @ Feb 13 2008, 13:16) Очень т... Feb 19 2008, 12:55 Degun Следующий вариант выполняется на 1 мсек быстрее, ч... Mar 17 2008, 13:29
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|