How can i find a pattern in an array of integers?

不羁岁月 提交于 2020-01-16 09:03:29

问题


A week ago I got my homework, where I have to write a function in C. The function gets a single array of positive integers, and it has to return the next number in the array. The arrays look something like this: {1,2,3,1,2,3,4,1,2,3,1,2,3,4,1,2,3,-1}; -1 means the end of the array.

I know that the number which has to be returned by the function is 1, however, how can I code a pattern finding algorithm? I haven't found any solution on the internet, since every other question about pattern searching is with strings, where the pattern which has to be found is already given.


回答1:


if the pattern has a length of 1, you will have a[k+1] == a[k] for all possible k.

more generally, you will have a[k+plen] == a[k] for the correct plen (pattern length) and all possible k.

so determine plen starting with 1... in your case you get 7 because a[7]==a[0], a[8]==a[1], ... a[16]==a[9], so just return a[17-7].




回答2:


Building on the answer by pmg one simple way to determine plen is to use brute force:

Begin by assuming plen is equal to 1, and increase plen by 1 until a pattern is found.

You find a pattern by checking if the sequence starting at every plen element match the first plen elements of the array. So if the current plen is 3, then you check if elements at index 3 to 5 (inclusive) matches the elements at index 0 to 2 (inclusive). If they match you check the next sequence starting at index 6. And so on.

If the end-of-array marker -1 is in the sequence you're just searching, then you have plen. And if a sequence is not matching then start over with an increased plen and try again.



来源:https://stackoverflow.com/questions/58658983/how-can-i-find-a-pattern-in-an-array-of-integers

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!