2013-03-08 37 views
5

Đây là một câu hỏi phỏng vấn mà tôi vừa tìm thấy trên Internet:Về bong bóng sắp xếp vs merge sort

Nếu bạn đang đi để thực hiện một chức năng mà phải mất một mảng số nguyên như là đầu vào và trả về tối đa, bạn sẽ sử dụng bong bóng sắp xếp hoặc hợp nhất sắp xếp để thực hiện chức năng này? Điều gì sẽ xảy ra nếu kích thước mảng nhỏ hơn 1000? Nếu nó lớn hơn 1000 thì sao?

Đây là cách tôi suy nghĩ về điều này:

Đầu tiên, việc sử dụng phân loại để thực hiện chức năng trên thực sự rất lạ. Bạn chỉ có thể đi qua các mảng một lần và tìm thấy một trong những tối đa. Thứ hai, nếu phải lựa chọn giữa hai loại, thì việc sắp xếp bong bóng tốt hơn - bạn không phải thực hiện toàn bộ quy trình sắp xếp bong bóng mà chỉ cần thực hiện lần đầu tiên. Nó tốt hơn so với sắp xếp hợp nhất cả về thời gian lẫn không gian.

Có bất kỳ sai lầm nào trong câu trả lời của tôi không? Tôi đã bỏ lỡ bất cứ điều gì?

+1

Tôi nghĩ bạn có quyền từ chối tiền đề: một đường thẳng (& không gian cố định) là tất cả những gì bạn cần để tìm giá thầu tối đa. Nếu một người phỏng vấn buộc bạn phải chọn, tôi sẽ đề xuất sắp xếp hợp nhất vì nó có độ phức tạp thời gian 'O (n log n)' tốt hơn. – phs

+0

Đây có thể là một câu hỏi được thiết kế để nhổ tận gốc noobs ...? –

Trả lời

9

Đó là một câu hỏi mẹo. Nếu bạn chỉ muốn tối đa, (hoặc thực sự, k thứ giá trị cho bất kỳ k, bao gồm việc tìm kiếm trung vị), có một thuật toán hoàn hảo tốt O(n). Phân loại là một sự lãng phí thời gian. Đó là những gì họ muốn nghe.

Như bạn nói, thuật toán cho tối đa thực sự tầm thường. Để đưa ra một câu hỏi như thế này, bạn nên có sẵn thuật toán chọn nhanh và cũng có thể đề xuất một cơ sở hạ tầng heap trong trường hợp bạn cần có khả năng thay đổi danh sách các giá trị và luôn có thể tạo ra nhanh nhất.

+0

Rất instructive. Cảm ơn. – quantumrose

2

Thứ nhất, tôi đồng ý với mọi thứ bạn đã nói, nhưng có lẽ nó đang hỏi về sự hiểu biết về độ phức tạp của thời gian và cách kích thước đầu vào là yếu tố lớn nhất sẽ nhanh nhất.

Sắp xếp bong bóng là O(n2) và Hợp nhất sắp xếp là O(nlogn). Vì vậy, trên một bộ nhỏ nó sẽ không khác nhau nhưng trên rất nhiều dữ liệu Bubble sắp xếp sẽ chậm hơn nhiều.

4

Tôi vừa googled các thuật toán. Loại bong bóng chiến thắng trong cả hai tình huống vì lợi ích lớn nhất chỉ phải chạy qua nó một lần. Sắp xếp hợp nhất không thể cắt bất kỳ vết cắt ngắn nào cho chỉ phải tính số lớn nhất. Hợp nhất có độ dài của danh sách, tìm phần giữa, và sau đó tất cả các số bên dưới so sánh giữa phía bên trái và tất cả ở trên so sánh với bên phải; đối lập với việc tạo ra các cặp độc nhất để so sánh. Có nghĩa là cho mỗi số còn lại trong mảng một số lượng tương đương so sánh cần phải được thực hiện. Ngoài ra, mỗi số được so sánh hai lần để số lượng thấp nhất của mảng sẽ bị loại bỏ nhất trong cả hai so sánh của chúng. Có nghĩa là chỉ có một số ít hơn trong mảng sau khi thực hiện hai so sánh trong nhiều tình huống. Bong bóng sẽ thống trị

+0

Điều đó có vẻ như là một câu hỏi tồi bởi vì nếu bạn đã thực hiện điều đó nếu sẽ là một thuật toán sắp xếp bong bóng có vòng lặp mà chỉ có một lần lặp lại sẽ được thực hiện với. – Zac

+3

Có lẽ họ đã lọc ra những kẻ như tôi, những người sẽ phải nói "giữ trong khi tôi google những gì bạn đang nói về sir" –

1

Chặn phần tối đa, phân loại bong bóng chậm hơn tiệm cận, nhưng nó có lợi thế lớn cho nhỏ n ở chỗ nó không yêu cầu sáp nhập/tạo mảng mới. Trong một số triển khai, điều này có thể làm cho nó nhanh hơn trong thời gian thực.

1

chỉ có một đường chuyền là cần thiết, đối với trường hợp tồi tệ nhất, để tìm tối đa u chỉ phải đi qua toàn bộ mảng, do đó bong bóng sẽ tốt hơn ..

1

Merge sort là dễ dàng cho một máy tính để sắp xếp các yếu tố và nó mất ít thời gian hơn để sắp xếp loại bong bóng. Trường hợp tốt nhất với loại hợp nhất là n*log2n và trường hợp xấu nhất là n*log2n. Với trường hợp loại bong bóng tốt nhất là O(n) và trường hợp xấu nhất là O(n2).

Các vấn đề liên quan