2
A
回答
1
該解決方案對列表進行排序,給予元素依次出現 - 沒有必要保持所有的元素,一旦他們以後不重複。
您的prolog解釋器必須具有msort()
功能,該功能對維護重複條目的列表進行排序。
maxRepeated([], []).
maxRepeated(L, E) :-
msort(L, [H|T]),
maxRepeated(T, H, H, 1, 0, E).
maxRepeated([], H, _, C1, C2, H) :- C1 >= C2.
maxRepeated([], _, X, C1, C2, X) :- C1 < C2.
maxRepeated([H|T], H, LastF, C1, C2, E) :-
maxRepeated(T, H, LastF, C1 + 1, C2, E).
maxRepeated([X|T], H, LastF, C1, C2, E) :-
(
C1 > C2
-> maxRepeated(T, X, H, 1, C1, E)
; maxRepeated(T, X, LastF, 1, C2, E)
).
該複雜性是通常O(n log n)
使用的排序,給出一次,排序後,遍歷此列表只有一次,聚集要素,並保持最頻繁的一個的軌道。
問候!
0
如果知道最大值是一個我可以採取,如果這方面的一個最大就是這樣,你可以創建一個數組,大到最大然後有一種方法,通過它可以找到O(n)時間中最重複的元素。
int A[max+1]; // set all elements to 0
int S[n]; // Set S
for (i=0;i<n;i++) A[ S[i] ]++;
int m=0, num; // num is the number to be found
for (i=1;i<=max;i++)
if (A[i] > m)
{
m = A[i];
num = i;
}
print (num)
0
這是一個快速和骯髒的答案。我將問題限制在一組允許的元素中。工程,但需要闡述。
maxRepeated([],_,Current,_,Current).
maxRepeated([H|T],L,Current,MaxCount,X) :-
(
count(L,H,N),
N > MaxCount,
maxRepeated(T,L,H,N,X)
)
;
maxRepeated(T,L,Current,MaxCount,X).
count([],X,0).
count([X|T],X,Y):- count(T,X,Z), Y is 1+Z.
count([X1|T],X,Z):- X1\=X,count(T,X,Z).
4
我喜歡這麼多的關係Prolog的功率:
maxRepeated(L, M) :-
sort(L, S),
maplist(count(L), S, C),
keysort(C, [_-M|_Ms]).
count(L, S, I-S) :-
aggregate(count, member(S, L), C), I is -C.
測試:
?- maxRepeated([1,2,7,3,6,1,2,2,3],M).
M = 2.
編輯和現在,更緊湊!
maxRepeated(L, M) :-
setof(I-E, C^(aggregate(count, member(E, L), C), I is -C), [_-M|_]).
相關問題
- 1. 最大重複的元素Prolog的
- 2. Prolog返回重複列表
- 3. Erlang重複元素列表
- 4. 增加重複元素的最大值
- 5. prolog:列表中的局部最大值
- 6. 在列表中添加元素的Prolog
- 7. Prolog - 從列表中獲取元素
- 8. 在Prolog中計數子列表元素
- 9. Prolog計算列表中的元素
- 10. 在Prolog中移動列表的元素
- 11. 用Prolog替換列表中的元素
- 12. 替換列表中的元素PROLOG
- 13. Prolog在子列表中獲取元素
- 14. 列表中的唯一元素(Prolog)
- 15. 在列表中找到最大元素
- 16. 列表視圖中的重複元素
- 17. WPF - 從列表中重複元素
- 18. 刪除列表中的重複元素
- 19. 爲R列表中不等大小的對象重複元素
- 20. 從列表中刪除重複元素的最有效方法
- 21. 重複最後一個元素鏈表
- 22. 創建固定大小元素列表中的非重複排列列表
- 23. Prolog中的子列表中的所有元素的列表
- 24. Prolog列表的交錯元素
- 25. Prolog中的大小列表
- 26. .Net列表和最大元素數
- 27. Prolog程序輸出列表的最後一個元素和前一個元素
- 28. prolog - 從列表列表中添加元素
- 29. Prolog - 在兩個列表中提取元素列表
- 30. Prolog用另一個列表替換列表中的元素
謝謝你的回答。我會接受這個答案作爲答案,因爲它比我的解決方案更一般和精細。 – Zoran
謝謝,這是一個很高興忘了一些東西,而與prolog編程。你的回答也非常好,如果它是由你自己製作的話,那就更好了(:好的! – Rubens