Xin giúp đỡ về tìm tập hợp các giá trị duy nhất. (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

huuhien80

Thành viên chính thức
Tham gia
30/12/08
Bài viết
54
Được thích
8
Em có một bảng dữ liệu đính kèm.

Em muôn tìm tập hợp ít nhất các giá trị mà trong chuỗi giá trị đó dòng nào trong bảng cũng phải chứa ít nhất 1 giá trị trong tập hợp đó.

Em đã dùng cách gán số liệu cho từng giá trị và ... tạo vòng lặp nhưng nhiều vòng lặp quá khiến chạy rất lâu mà vẫn không khả thi.

Em đưa dữ liệu gốc lên đây. Mong các Thầy giúp đỡ...
 

File đính kèm

Em có một bảng dữ liệu đính kèm.

Em muôn tìm tập hợp ít nhất các giá trị mà trong chuỗi giá trị đó dòng nào trong bảng cũng phải chứa ít nhất 1 giá trị trong tập hợp đó.

Em đã dùng cách gán số liệu cho từng giá trị và ... tạo vòng lặp nhưng nhiều vòng lặp quá khiến chạy rất lâu mà vẫn không khả thi.

Em đưa dữ liệu gốc lên đây. Mong các Thầy giúp đỡ...
Bạn test code sau coi sao
Mã:
Sub minc()
Dim a(), n(), s, g
Set s = Selection
t = s.Value
For Each cell In s
If cell <> "" Then If Application.Match(cell, Rows(cell.Row), 0) _
<> cell.Column Then cell.Value = ""
Next
For Each Row In s.Rows
If Application.CountA(Row) > 0 Then r = r + 1
Next
Do
m = Application.Max(Application.CountIf(s, s))
i = i + 1: ReDim Preserve a(1 To i)
For Each cell In s
If cell <> "" Then If Application.CountIf(s, cell) = m Then a(i) = cell: Exit For
Next
For Each cell In s
If cell = a(i) Then cell.EntireRow.Clear
Next
q = q + m
Loop Until q = r
s.Value = t
MsgBox "Chuoi nho nhat tim duoc la : " & Join(a)
End Sub
 
Upvote 0
Tổ hợp của bạn: 18 phần tử: j1 g k3 u1 b z2 t1 c p3 f2 y2 i1 v3 m3 a3 x1 r d3
đã thỏa mãn đk dòng cũng có ít nhất 1 phần tử. nhưng vẫn nhiều hơn của bạn Gtri

Mình rất cảm ơn bạn :)
 
Upvote 0
Bài này là loại toán đại số khó ăn. Nó dựa vào con toán Heuristic để tìm đường đi tối ưu (*). Tôi không có thì giờ nghiên cứu cách giải.
Nếu bạn đã có cách giải rồi thì đưa lý thuyết lên đây. Tôi sẽ mách cho cách code. Còn không thì chỉ có chính sách vét cạn.

(*) Bạn biết luật toán Heuristic rồi mà! đường đi tối ưu chỉ có nghĩa là kết quả "gần" tối ưu thôi, chứ không hề bảo đảm tối ưu.
 
Upvote 0
Bài này là loại toán đại số khó ăn. Nó dựa vào con toán Heuristic để tìm đường đi tối ưu (*). Tôi không có thì giờ nghiên cứu cách giải.
Nếu bạn đã có cách giải rồi thì đưa lý thuyết lên đây. Tôi sẽ mách cho cách code. Còn không thì chỉ có chính sách vét cạn.

(*) Bạn biết luật toán Heuristic rồi mà! đường đi tối ưu chỉ có nghĩa là kết quả "gần" tối ưu thôi, chứ không hề bảo đảm tối ưu.


Thật sự mình chưa có lời giải! Vì dữ liệu của mình nó đòi hỏi tìm như vậy nên mình mới đưa lên nhờ giúp, Mình muốn biết cách tìm để khi xử lý dữ liệu khác hoặc bổ sung thêm dữ liệu sẽ tự giải quyết được.

Khi tổ hợp ít phần tử thì chi phí cũng giảm theo tỷ lệ thuận! Chính vì vậy mình mới mong tìm được tổ hợp càng ít phần tử càng tốt.
 
Upvote 0
Mình tìm được chuỗi 16: j1-g-k3-u1-b-z2-v3-c2-l-f3-j3-r1-a1-l3-n2-p2
Thật sự không biết thế nào là tối ưu.
đảo vị trí cột thì được chuỗi 15:
l-g-r1-j1-u1-c2-z2-v3-f3-j-j3-a1-s1-l2-b
 
Lần chỉnh sửa cuối:
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
chưa chính xác, để coi lại đã


Của bạn là tìm max giá trị và xóa tất cả các row chứa giá trị đó. xong tìm max chỗ còn lại và tiếp tục xóa cho đến hết >>> như vậy có thể xóa đi cả những cái tối ưu hơn .... (Mình thử code của bạn với dữ liệu ít thì rất chính xác với mảng 6x10)

mấy hôm nay thực sự mình đầu tư nhiều thời gian vào mà vẫn không có kết quả. Vì không có ý tưởng thì không biết phát triển thế nào.
 
Upvote 0
1. Xóa trùng trong hàng.
2. Lọc các ký tự nhiều nhất >3 trở lên được XX ký tự.
3. Dùng vòng lặp (14 vòng lặp) để tìm theo đk 14 ký tự trong XX ký tự. >>> vẫn không ra 1 KQ nào.

Đấy vẫn chưa phải cách phù hợp cho bài này...

Mong mọi người giúp em....
 
Lần chỉnh sửa cuối:
Upvote 0
1. Xóa trùng trong hàng.
2. Lọc các ký tự nhiều nhất >3 trở lên được XX ký tự.
3. Dùng vòng lặp (14 vòng lặp) để tìm theo đk 14 ký tự trong XX ký tự. >>> vẫn không ra 1 KQ nào.

Đấy vẫn chưa phải cách phù hợp cho bài này...

Mong mọi người giúp em....

topic của bạn làm tôi mất cả mấy ngày mà vẫn không thể ra được kết quả tối ưu như của bạn Gtri.
tôi chỉ tìm được tập hợp 17 giá trị
có nhiều hơn một tập hợp như bạn Gtri nói, tuy thuộc vào giá trị đầu tiên mà nó lấy, nếu nó lấy giá trị khác, kết quả phía sau sẻ khác
========
thui làm tới đây thui, ko làm nữa, mất cả mấy ngày.hichic
ah, quên, bạn chạy module thu() nha
 

File đính kèm

Upvote 0
topic của bạn làm tôi mất cả mấy ngày mà vẫn không thể ra được kết quả tối ưu như của bạn Gtri.
tôi chỉ tìm được tập hợp 17 giá trị
có nhiều hơn một tập hợp như bạn Gtri nói, tuy thuộc vào giá trị đầu tiên mà nó lấy, nếu nó lấy giá trị khác, kết quả phía sau sẻ khác
========
thui làm tới đây thui, ko làm nữa, mất cả mấy ngày.hichic
ah, quên, bạn chạy module thu() nha

Mình đã liên lạc với bạn gtri nhưng bạn ý bảo PP của bạn ý không share Miễn phí. Vì vậy mình đã nghĩ topic này bị lãng quên rồi.

Cảm ơn bạn. rất nhiều. Từ hôm đó đến giờ mình cũng vẫn đau đầu vì chưa tìm ra cách.

Phải nói thật là bạn quá nhiệt tình....
 
Upvote 0
Phương pháp này em cũng đang tìm cách giải! vì rất cần thiết cho xử lý dữ liệu của phần mềm Thống kê xổ số Kiến thiết Thủ Đô của em.

Em đã nghĩ ra phương án ..... như thế này.

1. xóa các giá trị trùng trong cùng 1 dòng
2. tạo công thức đếm từng giá trị.
3. Xem các ký tự nào nhiều nhất >>> khi ghép với nhau tạo ra ít lần đi cùng nhau (Xen kẽ nhau chứ ko đi cùng 1 dòng)
4. Sau khi tìm đc 50-60% số dòng thì bắt đầu tạo vòng lặp cho 40% số dòng còn lại (lúc đó số vòng lặp sẽ rất ít)

Bác gtri có thể chia sẻ (hoặc bán) cho em phương pháp không ạ! Em đã inbox cho bác mà không thấy hồi âm.
 
Upvote 0
Em đã nghĩ ra phương án ..... như thế này.

1. xóa các giá trị trùng trong cùng 1 dòng
2. tạo công thức đếm từng giá trị.
3. Xem các ký tự nào nhiều nhất >>> khi ghép với nhau tạo ra ít lần đi cùng nhau (Xen kẽ nhau chứ ko đi cùng 1 dòng)
4. Sau khi tìm đc 50-60% số dòng thì bắt đầu tạo vòng lặp cho 40% số dòng còn lại (lúc đó số vòng lặp sẽ rất ít)

Bác gtri có thể chia sẻ (hoặc bán) cho em phương pháp không ạ! Em đã inbox cho bác mà không thấy hồi âm.

Chả hiểu đang nói cái gì nữa
 
Upvote 0
Nếu dùng SQL thì câu lệnh rất đơn giản.

SELECT DISTINCT [TÊN CỘT DỮ LIỆU] FROM [TÊN VÙNG DỮ LIỆU]
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom