Advertisement
Savelyev_Vyacheslav

task_3_1

Oct 26th, 2021
1,386
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 3.16 KB | None | 0 0
  1. % Задача 3.1
  2. % Написать скрипт, в котором:
  3. % генерируется строковая переменная длиной 5000 символов,
  4. % каждый ее символ - случайно выбранный из букв ‘A’, ‘B’ и ‘C’;
  5. % в строке выделяется самый длинный палиндром
  6. % (последовательность символов, которая читается
  7. % одинаково в прямом и обратном направлениях);
  8. % пользователю выводится сообщение (диалоговое окно),
  9. % в котором указана длина (число символов)
  10. % самого длинного палиндрома;
  11. % Для сравнения строковых переменных рекомендуется
  12. % использовать функцию strcmp().
  13.  
  14. global sizeM STR p
  15. sizeM = 5000
  16. data_=['A' 'B' 'C'];
  17. MixNumb = randi(3,1,sizeM);
  18.  
  19. SCAN= data_(MixNumb);
  20. SCANT=flip(SCAN,2);
  21. STR=num2str(strcmp(SCAN,SCAN));
  22. STR(strfind(STR, ' ')) = [];
  23. tic;  % tic - начало измерения времени
  24. ArrCollection=[]
  25. s=20;
  26. ARS=0;
  27. for size=s:-1:1
  28.     for k=1:1:sizeM-size
  29.     ar=strfind(SCAN, SCANT(k:k+size));
  30.         if(length(ar))
  31.             if (SCAN(k:k+size) == flip(SCAN(k:k+size)))
  32.             ArrCollection = cat(2,ArrCollection,ar);
  33.             ARS=size;
  34.             ARS_i=k;
  35.             break;
  36.             end
  37.         end    
  38.     end
  39.     if(ARS)
  40.         break;
  41.     end
  42. end  
  43. t1 =toc % toc - завершение измерения времени
  44. ar
  45. ARS+1
  46. BB=SCAN(ARS_i:ARS_i+ARS)
  47.  
  48.  
  49.  
  50.  
  51. s=ones(sizeM,sizeM);
  52. a = ones(sizeM/2,sizeM/2);
  53. b=triu(a,1);
  54. bb=triu(a,2);
  55. c=cat(2,b,flip(bb,2)) %матрица пирамида
  56. tic;  % tic - начало измерения времени
  57. for jj=1:1:sizeM/2-1
  58.     start_=1+jj; end_= sizeM-jj-1; % оптимизация кода
  59.     for ii = start_:1:end_
  60.          if (c(jj,ii))  
  61.              sL = ii-jj;
  62.              sR = ii+jj+1;
  63.            if (SCAN(1,sL:ii) == flip(SCAN(1,ii+1:sR))) % проверка на палиндром
  64. %                global MAX_ SIZE
  65.                MAX_=ii;
  66.                SIZE=sR-sL+1;
  67.            end
  68.          end
  69.     end
  70. end
  71. t2 =toc % toc - завершение измерения времени
  72. %Проверка
  73. out = SCAN(1,(MAX_-(SIZE-1)/2):(MAX_+(SIZE-1)/2))
  74. length(out)
  75.  
  76. s=ones(sizeM,sizeM);
  77. a = ones(sizeM/2,sizeM/2);
  78. b=triu(a,1)
  79. c=cat(2,b,flip(b,2)); %матрица пирамида
  80. tic;  % tic - начало измерения времени
  81. for jj=1:1:sizeM/2-1
  82.     start_=1+jj; end_= sizeM-jj; % оптимизация кода
  83.     for ii = start_:1:end_
  84. %         if (c(jj,ii))  
  85.              sL = ii-jj;
  86.              sR = ii+jj;
  87.            if (SCAN(1,sL:ii) == flip(SCAN(1,ii:sR))) % проверка на палиндром
  88.                MAX_=ii;
  89.                SIZE=sR-sL+1;
  90.            end
  91. %         end
  92.     end
  93. end
  94. t3 =toc % toc - завершение измерения времени
  95. %Проверка
  96. out = SCAN(1,(MAX_-(SIZE-1)/2):(MAX_+(SIZE-1)/2))
  97. length(out)
  98.  
  99.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement