30/09/2018, 16:18

lần lượt tìm 2 phần tử nhỏ nhất

mình có 1 dãy số nguyên,mình muốn tìm 2 phần tử nhỏ nhất rồi cộng chúng với nhau sau đó thêm giá trị của tổng 2 phần tử nhỏ nhất đó vào dãy ban đầu và loại bỏ 2 phần tử nhỏ vừa rồi đi,sau đó tiếp tục công việc trên đến khi chỉ còn 1 phần tử thì ý tưởng thế nào vậy các bạn…
p/s: đấy là bài toán tìm 2 phần tử có tần số bé nhất trong huffman code,bạn nào biết rồi thì chỉ mình ý tưởng luôn

viết 18:22 ngày 30/09/2018

Bạn sort mảng tăng dần, rồi cứ lấy 2 phần tử đầu tiên cộng lại (a[left] + a[left+1]). Việc xóa 2 phần tử nhỏ nhất không hẳn phải xóa hay ghi đè lên. Bạn chỉ việc tăng chỉ số left lên 1, nghĩa là không đụng chạm gì phần tử trước đó nữa (Xóa 2 phần tử rồi lại chèn 1 phần tử vào nghĩa là chỉ bỏ đi 1 phần tử thôi phải không). Làm đến khi nào left = n-1 thì thôi.

Đói bụng quá không code ra cho bạn được

Hồ Thế Chín viết 18:22 ngày 30/09/2018

vậy nếu mỗi 1 phần tử gắn với 1 ký tự thì có làm như bạn đc không?,nghĩa là dãy số nguyên mình nói ở trên là 1 trường trong 1 cấu trúc gồm 1 số nguyên và 1 ký tự

viết 18:21 ngày 30/09/2018

Đề ghi

mình muốn tìm 2 phần tử nhỏ nhất

Vậy thì nó có là kiểu dữ liệu gì thì cũng phải có phép so sánh mới tìm được phần tử bé nhất. Tùy vào quy tắc so sánh đưa ra là gì thôi. Có so sánh thì sẽ có thể sắp xếp.

Bài liên quan
0