{"group":{"id":1,"name":"Community","lockable":false,"created_at":"2012-01-18T18:02:15.000Z","updated_at":"2025-12-14T01:33:56.000Z","description":"Problems submitted by members of the MATLAB Central community.","is_default":true,"created_by":161519,"badge_id":null,"featured":false,"trending":false,"solution_count_in_trending_period":0,"trending_last_calculated":"2025-12-14T00:00:00.000Z","image_id":null,"published":true,"community_created":false,"status_id":2,"is_default_group_for_player":false,"deleted_by":null,"deleted_at":null,"restored_by":null,"restored_at":null,"description_opc":null,"description_html":null,"published_at":null},"problems":[{"id":934,"title":"Find: Faster Alternatives for Large Sorted/Unique Vectors","description":"The Challenge is to create faster Find methods for large unique ascending vectors.\r\n\r\nMethods exist that are 1000 times faster than Find.\r\n\r\nMethods have applications where data files are loaded for multiple searches(Rubik's Mini Cube, DNA).\r\n\r\n*Input:* [a,val]\r\n\r\n*   a: vector [N large,1] of type uint32 that is unique and sorted ascending\r\n*   val: The value to find in the \"a\" vector. Val will exist in \"a\".\r\n\r\n*Output:* [ptr]\r\n\r\n*   ptr: The index in array \"a\" where a(ptr) is val\r\n\r\n*Score:* Time in msec to find 200 random values in a 12,000,000 long vector\r\n\r\n\r\nThe basic find(a==val,1,'first') takes approximately 14 seconds (12M, 200 cases).\r\n\r\nHigh performance find_fast can find 200 values in 4 to 12 milli-seconds for a 12M vector.\r\n\r\nFind time increases linearly with the array size. High performance methods don't appear to incur any increased processing time.\r\n\r\nHints:\r\n\r\n* There are  multiple methods that significantly outperform find.\r\n* Bisect searches\r\n* Predictive searches\r\n* Combining Bisect/Predictive with a Linear Chaser\r\n* \r\n\r\nA static goal vector find time could be enhanced by a Pre-Index array. Not applicable to this challenge.\r\n","description_html":"\u003cp\u003eThe Challenge is to create faster Find methods for large unique ascending vectors.\u003c/p\u003e\u003cp\u003eMethods exist that are 1000 times faster than Find.\u003c/p\u003e\u003cp\u003eMethods have applications where data files are loaded for multiple searches(Rubik's Mini Cube, DNA).\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e [a,val]\u003c/p\u003e\u003cul\u003e\u003cli\u003ea: vector [N large,1] of type uint32 that is unique and sorted ascending\u003c/li\u003e\u003cli\u003eval: The value to find in the \"a\" vector. Val will exist in \"a\".\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e [ptr]\u003c/p\u003e\u003cul\u003e\u003cli\u003eptr: The index in array \"a\" where a(ptr) is val\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e\u003cb\u003eScore:\u003c/b\u003e Time in msec to find 200 random values in a 12,000,000 long vector\u003c/p\u003e\u003cp\u003eThe basic find(a==val,1,'first') takes approximately 14 seconds (12M, 200 cases).\u003c/p\u003e\u003cp\u003eHigh performance find_fast can find 200 values in 4 to 12 milli-seconds for a 12M vector.\u003c/p\u003e\u003cp\u003eFind time increases linearly with the array size. High performance methods don't appear to incur any increased processing time.\u003c/p\u003e\u003cp\u003eHints:\u003c/p\u003e\u003cul\u003e\u003cli\u003eThere are  multiple methods that significantly outperform find.\u003c/li\u003e\u003cli\u003eBisect searches\u003c/li\u003e\u003cli\u003ePredictive searches\u003c/li\u003e\u003cli\u003eCombining Bisect/Predictive with a Linear Chaser\u003c/li\u003e\u003cli\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eA static goal vector find time could be enhanced by a Pre-Index array. Not applicable to this challenge.\u003c/p\u003e","function_template":"function ptr = find_fast(a,val)\r\n  ptr = find(a==val,1,'first');\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',0);\r\n%%\r\nL=1000;\r\na=randi(2^32-1,L*1.2,1,'uint32');\r\na=unique(a,'R2012a');\r\na=a(1:L);\r\n\r\n% Warm-Up Test cases\r\nfor i=1:5:1000\r\n assert(isequal(find_fast(a,a(i)),i))\r\nend\r\n%%\r\n% Timing Performance Case\r\nL=12000000;\r\na=randi(2^32-1,L*1.2,1,'uint32');\r\na=unique(a,'R2012a');\r\na=a(1:L);\r\n\r\nq=200;\r\n\r\nval=zeros(q,1);\r\nfor i=1:q\r\n val(i)=a(randi(L));\r\nend\r\n\r\nt0=clock;\r\nfor i=1:q\r\n ptr=find_fast(a,val(i));\r\nend\r\ndt=etime(clock,t0)*1000;\r\n\r\n\r\nassert(isequal(find_fast(a,val(1)),find(a==val(1),1,'first')))\r\n\r\nfprintf('Your Time = %i msec\\n',floor(dt))\r\n\r\nfeval(@assignin,'caller','score',min(200,floor(dt)));\r\n%   Performance Score\r\n\r\n\r\n","published":true,"deleted":false,"likes_count":3,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":37,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2012-09-07T01:12:34.000Z","updated_at":"2025-12-08T15:39:06.000Z","published_at":"2012-09-07T03:26:59.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Challenge is to create faster Find methods for large unique ascending vectors.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eMethods exist that are 1000 times faster than Find.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eMethods have applications where data files are loaded for multiple searches(Rubik's Mini Cube, DNA).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e [a,val]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ea: vector [N large,1] of type uint32 that is unique and sorted ascending\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eval: The value to find in the \\\"a\\\" vector. Val will exist in \\\"a\\\".\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e [ptr]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eptr: The index in array \\\"a\\\" where a(ptr) is val\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScore:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Time in msec to find 200 random values in a 12,000,000 long vector\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe basic find(a==val,1,'first') takes approximately 14 seconds (12M, 200 cases).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eHigh performance find_fast can find 200 values in 4 to 12 milli-seconds for a 12M vector.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFind time increases linearly with the array size. High performance methods don't appear to incur any increased processing time.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eHints:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThere are multiple methods that significantly outperform find.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eBisect searches\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePredictive searches\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eCombining Bisect/Predictive with a Linear Chaser\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eA static goal vector find time could be enhanced by a Pre-Index array. Not applicable to this challenge.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"}],"problem_search":{"errors":[],"problems":[{"id":934,"title":"Find: Faster Alternatives for Large Sorted/Unique Vectors","description":"The Challenge is to create faster Find methods for large unique ascending vectors.\r\n\r\nMethods exist that are 1000 times faster than Find.\r\n\r\nMethods have applications where data files are loaded for multiple searches(Rubik's Mini Cube, DNA).\r\n\r\n*Input:* [a,val]\r\n\r\n*   a: vector [N large,1] of type uint32 that is unique and sorted ascending\r\n*   val: The value to find in the \"a\" vector. Val will exist in \"a\".\r\n\r\n*Output:* [ptr]\r\n\r\n*   ptr: The index in array \"a\" where a(ptr) is val\r\n\r\n*Score:* Time in msec to find 200 random values in a 12,000,000 long vector\r\n\r\n\r\nThe basic find(a==val,1,'first') takes approximately 14 seconds (12M, 200 cases).\r\n\r\nHigh performance find_fast can find 200 values in 4 to 12 milli-seconds for a 12M vector.\r\n\r\nFind time increases linearly with the array size. High performance methods don't appear to incur any increased processing time.\r\n\r\nHints:\r\n\r\n* There are  multiple methods that significantly outperform find.\r\n* Bisect searches\r\n* Predictive searches\r\n* Combining Bisect/Predictive with a Linear Chaser\r\n* \r\n\r\nA static goal vector find time could be enhanced by a Pre-Index array. Not applicable to this challenge.\r\n","description_html":"\u003cp\u003eThe Challenge is to create faster Find methods for large unique ascending vectors.\u003c/p\u003e\u003cp\u003eMethods exist that are 1000 times faster than Find.\u003c/p\u003e\u003cp\u003eMethods have applications where data files are loaded for multiple searches(Rubik's Mini Cube, DNA).\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e [a,val]\u003c/p\u003e\u003cul\u003e\u003cli\u003ea: vector [N large,1] of type uint32 that is unique and sorted ascending\u003c/li\u003e\u003cli\u003eval: The value to find in the \"a\" vector. Val will exist in \"a\".\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e [ptr]\u003c/p\u003e\u003cul\u003e\u003cli\u003eptr: The index in array \"a\" where a(ptr) is val\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e\u003cb\u003eScore:\u003c/b\u003e Time in msec to find 200 random values in a 12,000,000 long vector\u003c/p\u003e\u003cp\u003eThe basic find(a==val,1,'first') takes approximately 14 seconds (12M, 200 cases).\u003c/p\u003e\u003cp\u003eHigh performance find_fast can find 200 values in 4 to 12 milli-seconds for a 12M vector.\u003c/p\u003e\u003cp\u003eFind time increases linearly with the array size. High performance methods don't appear to incur any increased processing time.\u003c/p\u003e\u003cp\u003eHints:\u003c/p\u003e\u003cul\u003e\u003cli\u003eThere are  multiple methods that significantly outperform find.\u003c/li\u003e\u003cli\u003eBisect searches\u003c/li\u003e\u003cli\u003ePredictive searches\u003c/li\u003e\u003cli\u003eCombining Bisect/Predictive with a Linear Chaser\u003c/li\u003e\u003cli\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eA static goal vector find time could be enhanced by a Pre-Index array. Not applicable to this challenge.\u003c/p\u003e","function_template":"function ptr = find_fast(a,val)\r\n  ptr = find(a==val,1,'first');\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',0);\r\n%%\r\nL=1000;\r\na=randi(2^32-1,L*1.2,1,'uint32');\r\na=unique(a,'R2012a');\r\na=a(1:L);\r\n\r\n% Warm-Up Test cases\r\nfor i=1:5:1000\r\n assert(isequal(find_fast(a,a(i)),i))\r\nend\r\n%%\r\n% Timing Performance Case\r\nL=12000000;\r\na=randi(2^32-1,L*1.2,1,'uint32');\r\na=unique(a,'R2012a');\r\na=a(1:L);\r\n\r\nq=200;\r\n\r\nval=zeros(q,1);\r\nfor i=1:q\r\n val(i)=a(randi(L));\r\nend\r\n\r\nt0=clock;\r\nfor i=1:q\r\n ptr=find_fast(a,val(i));\r\nend\r\ndt=etime(clock,t0)*1000;\r\n\r\n\r\nassert(isequal(find_fast(a,val(1)),find(a==val(1),1,'first')))\r\n\r\nfprintf('Your Time = %i msec\\n',floor(dt))\r\n\r\nfeval(@assignin,'caller','score',min(200,floor(dt)));\r\n%   Performance Score\r\n\r\n\r\n","published":true,"deleted":false,"likes_count":3,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":37,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2012-09-07T01:12:34.000Z","updated_at":"2025-12-08T15:39:06.000Z","published_at":"2012-09-07T03:26:59.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Challenge is to create faster Find methods for large unique ascending vectors.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eMethods exist that are 1000 times faster than Find.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eMethods have applications where data files are loaded for multiple searches(Rubik's Mini Cube, DNA).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e [a,val]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ea: vector [N large,1] of type uint32 that is unique and sorted ascending\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eval: The value to find in the \\\"a\\\" vector. Val will exist in \\\"a\\\".\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e [ptr]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eptr: The index in array \\\"a\\\" where a(ptr) is val\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScore:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Time in msec to find 200 random values in a 12,000,000 long vector\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe basic find(a==val,1,'first') takes approximately 14 seconds (12M, 200 cases).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eHigh performance find_fast can find 200 values in 4 to 12 milli-seconds for a 12M vector.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFind time increases linearly with the array size. High performance methods don't appear to incur any increased processing time.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eHints:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThere are multiple methods that significantly outperform find.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eBisect searches\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePredictive searches\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eCombining Bisect/Predictive with a Linear Chaser\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eA static goal vector find time could be enhanced by a Pre-Index array. Not applicable to this challenge.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"}],"term":"tag:\"profiling\"","current_player_id":null,"fields":[{"name":"page","type":"integer","callback":null,"default":1,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"per_page","type":"integer","callback":null,"default":50,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"sort","type":"string","callback":null,"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"body","type":"text","callback":null,"default":"*:*","directive":null,"facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":false},{"name":"group","type":"string","callback":null,"default":null,"directive":"group","facet":true,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"difficulty_rating_bin","type":"string","callback":null,"default":null,"directive":"difficulty_rating_bin","facet":true,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"id","type":"integer","callback":null,"default":null,"directive":"id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"tag","type":"string","callback":null,"default":null,"directive":"tag","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"product","type":"string","callback":null,"default":null,"directive":"product","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"created_at","type":"timeframe","callback":{},"default":null,"directive":"created_at","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"profile_id","type":"integer","callback":null,"default":null,"directive":"author_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"created_by","type":"string","callback":null,"default":null,"directive":"author","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"player_id","type":"integer","callback":null,"default":null,"directive":"solver_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"player","type":"string","callback":null,"default":null,"directive":"solver","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"solvers_count","type":"integer","callback":null,"default":null,"directive":"solvers_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"comments_count","type":"integer","callback":null,"default":null,"directive":"comments_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"likes_count","type":"integer","callback":null,"default":null,"directive":"likes_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"leader_id","type":"integer","callback":null,"default":null,"directive":"leader_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"leading_solution","type":"integer","callback":null,"default":null,"directive":"leading_solution","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true}],"filters":[{"name":"asset_type","type":"string","callback":null,"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":"\"cody:problem\"","prepend":true},{"name":"profile_id","type":"integer","callback":{},"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":"author_id","static":null,"prepend":true}],"query":{"params":{"per_page":50,"term":"tag:\"profiling\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"profiling\"","","\"","profiling","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007fa2d6ccd168\u003e":null,"#\u003cMathWorks::Search::Field:0x00007fa2d6cccf88\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007fa2d6cc69a8\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007fa2d6ccd708\u003e":1,"#\u003cMathWorks::Search::Field:0x00007fa2d6ccd488\u003e":50,"#\u003cMathWorks::Search::Field:0x00007fa2d6ccd3e8\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007fa2d6ccd2a8\u003e":"tag:\"profiling\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007fa2d6ccd2a8\u003e":"tag:\"profiling\""},"queried_facets":{}},"query_backend":{"connection":{"configuration":{"index_url":"http://index-op-v2/solr/","query_url":"http://search-op-v2/solr/","direct_access_index_urls":["http://index-op-v2/solr/"],"direct_access_query_urls":["http://search-op-v2/solr/"],"timeout":10,"vhost":"search","exchange":"search.topic","heartbeat":30,"pre_index_mode":false,"host":"rabbitmq-eks","port":5672,"username":"search","password":"J3bGPZzQ7asjJcCk","virtual_host":"search","indexer":"amqp","http_logging":"true","core":"cody"},"query_connection":{"uri":"http://search-op-v2/solr/cody/","proxy":null,"connection":{"parallel_manager":null,"headers":{"User-Agent":"Faraday v1.0.1"},"params":{},"options":{"params_encoder":"Faraday::FlatParamsEncoder","proxy":null,"bind":null,"timeout":null,"open_timeout":null,"read_timeout":null,"write_timeout":null,"boundary":null,"oauth":null,"context":null,"on_data":null},"ssl":{"verify":true,"ca_file":null,"ca_path":null,"verify_mode":null,"cert_store":null,"client_cert":null,"client_key":null,"certificate":null,"private_key":null,"verify_depth":null,"version":null,"min_version":null,"max_version":null},"default_parallel_manager":null,"builder":{"adapter":{"name":"Faraday::Adapter::NetHttp","args":[],"block":null},"handlers":[{"name":"Faraday::Response::RaiseError","args":[],"block":null}],"app":{"app":{"ssl_cert_store":{"verify_callback":null,"error":null,"error_string":null,"chain":null,"time":null},"app":{},"connection_options":{},"config_block":null}}},"url_prefix":"http://search-op-v2/solr/cody/","manual_proxy":false,"proxy":null},"update_format":"RSolr::JSON::Generator","update_path":"update","options":{"url":"http://search-op-v2/solr/cody"}}},"query":{"params":{"per_page":50,"term":"tag:\"profiling\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"profiling\"","","\"","profiling","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007fa2d6ccd168\u003e":null,"#\u003cMathWorks::Search::Field:0x00007fa2d6cccf88\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007fa2d6cc69a8\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007fa2d6ccd708\u003e":1,"#\u003cMathWorks::Search::Field:0x00007fa2d6ccd488\u003e":50,"#\u003cMathWorks::Search::Field:0x00007fa2d6ccd3e8\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007fa2d6ccd2a8\u003e":"tag:\"profiling\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007fa2d6ccd2a8\u003e":"tag:\"profiling\""},"queried_facets":{}},"options":{"fields":["id","difficulty_rating"]},"join":" "},"results":[{"id":934,"difficulty_rating":"easy-medium"}]}}