올바른 순서로 목록에 항목을 추가하는 함수를 작성하고 싶습니다. 1
은 [2, 3]
입니다. 나는 haskell에 익숙하지 않고 Ord
을 사용하지 않고 그것을하는 방법에 대한 도움이 필요하다.목록에 요소 추가
답변
요소를 정렬 된 목록에 삽입하는 기능을 작성하는 것은 어렵지 않습니다.
insert :: Ord a => a -> [a] -> [a]
insert x [] = [x]
insert x (y:ys)
| x > y = y : insert x ys
| otherwise = x : y : ys
그러나이 경우에는 사용하기에 효율적이지 않을 수 있습니다. 목록의 문제점은 이런 종류의 삽입 문제로 반복적으로 척추의 큰 부분의 새로운 복사본을 만드는 것입니다. 올바른 위치를 찾을 때까지 목록에서 선형으로 스캔해야합니다. 올바른 위치를 검색하는 가장 빠른 방법은 아닙니다.
Data.Set 또는 Data.IntSet에있는 것과 같은 데이터 구조를 사용하는 것이 더 나을 것입니다. 일반적으로 O (log n)은 삽입보다 많습니다. 왜냐하면 목록보다 더 많은 공유를 허용하는 나무 나 다른 데이터 구조를 사용하고 올바른 위치를 빠르게 찾을 수 있기 때문입니다.
큰 n (목록 / 집합 크기)에 대해 O (log n)이 O (n)보다 훨씬 낫습니다. 이는 제안한대로 목록을 사용하면 얻을 수있는 것입니다. – chrisdb
[a]를 반환해야합니까? 대답을 자세히 설명해 주시겠습니까? –
- 1. 특정 사용자의 공지 사항 목록에 요소 추가
- 2. R 목록에 요소 삽입
- 3. 목록에 요소 결합하기 - OCaml
- 4. 목록에 요소를 순서대로 추가 하시겠습니까?
- 5. 목록에 정수로 추가
- 6. 목록에 이벤트 추가
- 7. 목록에 열거 형 추가
- 8. 연결된 목록에 추가
- 9. 2 개의 목록에 일치하는 요소
- 10. 프로그래밍 방식으로 목록에 항목 추가
- 11. 목록에 개체에 대한 참조를 추가
- 12. 배열 목록에 배열 변수 추가
- 13. Sencha 중첩 목록에 항목 추가
- 14. 복제 된 SPView를 목록에 추가
- 15. 집합의 요소를 Python의 목록에 추가
- 16. MVC3 요소 목록에 대한 합계를 확인하십시오.
- 17. Haskell에서 전체 목록에 대한 요소 사용
- 18. WPF : 구성 요소 목록에 애니메이션을 적용하는 방법?
- 19. LINQ : 목록에 한 번만 나타나는 요소 선택
- 20. 정렬 및 회전 목록에 요소 삽입
- 21. Prolog - 목록에 "배치 된"요소 합계
- 22. 어레이 문제에 요소 추가
- 23. jQuery - 배열에 요소 추가
- 24. jQuery에서 요소 뒤에 추가
- 25. 벡터에 요소 추가
- 26. GLCanvas에 구성 요소 추가
- 27. 배열에 요소 추가
- 28. 요소 값에 텍스트 추가
- 29. 추가] 요소 :: 빌더
- 30. JQuery와 추가 요소
목록이 Ord없이 "올바른 순서"인지 어떻게 알 수 있습니까? – kennytm
당신이 이것을 설정하기 전에, 당신이 원하는 것을 더 명확하게해야합니까? 'louie 1 [2,3]와 louie 2 [1,3]는 모두 [1,2,3]라고 가정합니다. 그러나 예를 들어'louie 1 [3,2]'또는'louie 2 [3,1]'또는'louie 6 [5,3,17,2]'는 무엇입니까? – applicative