Các thử nghiệm tâm lý thường yêu cầu bạn giả ngẫu nhiên lệnh thử nghiệm, để các thử nghiệm dường như ngẫu nhiên, nhưng bạn không nhận được quá nhiều thử nghiệm tương tự liên tiếp (điều này có thể xảy ra hoàn toàn ngẫu nhiên) đặt hàng).Phân loại thuật toán để giữ các giá trị bằng nhau tách biệt
Hãy nói rằng màn hình hiển thị hình ảnh của mỗi phép thử có một màu sắc và kích thước:
display_list = []
colours = {0: 'red', 1: 'blue', 2: 'green', 3: 'yellow'}
sizes = [1] * 20 + [2] * 20 + [3] * 20 + [4] * 20 + [5] * 20 + [6] * 20
for i in range(120):
display_list.append({'colour': colours[i % 4], 'size': sizes[i]})
print(display_list)
Và chúng ta có thể nhìn vào số lượng tối đa của các thử nghiệm liên tiếp có cùng giá trị cho một trong hai tài sản sử dụng chức năng này:
def consecutive_properties(seq, field):
longest_run = 0
prev_value = None
current_run = 0
for d in seq:
if d[field] == prev_value:
current_run += 1
else:
current_run = 1
if current_run > longest_run:
longest_run = current_run
prev_value = d[field]
return longest_run
Output:
>>> print("Consecutive colours: ", consecutive_properties(display_list, 'colour')
('Consecutive colours: ', 1)
>>> print("Consecutive sizes: ", consecutive_properties(display_list, 'size'))
('Consecutive sizes: ', 20)
có bất kỳ thuật toán bạn biết điều đó sẽ cho phép giảm thiểu các lần chạy liên tiếp của một trong hai hoặc cả hai thuộc tính, hoặc ít nhất giữ cho các giá trị này chạy dưới một độ dài được chỉ định? Nếu sau này, giả sử không quá 4 trong một hàng cùng màu hoặc kích thước.
Những gì tôi đã cố gắng:
Các giải pháp tôi có bây giờ về cơ bản không một chút thông minh bogosort, trong đó có được hiệu quả khủng khiếp. Về cơ bản:
- Quý khách nghỉ ngơi toàn bộ danh sách thành những phần có chứa tất cả các hoán vị của các thuộc tính: nếu bạn phá vỡ
display_list
vào khối có độ dài 24, mỗi đoạn có mỗi màu sắc kết hợp với mỗi kích thước. Giả sử rằng danh sách thử nghiệm luôn luôn có thể được chia thành các khối hoán vị này, vì bạn biết những hoán vị nào là từ thiết kế của thử nghiệm. - Bạn chọn độ dài tối đa cho mỗi đoạn
- Bạn trộn từng đoạn cho đến khi độ dài chạy cho mỗi đoạn thấp hơn giá trị tối đa (điều này thực sự có nghĩa là trong danh sách dùng thử tổng thể, thời gian chạy của bạn có thể dài gấp đôi, vì bạn có thể có thời gian chạy ở cuối đoạn này và bắt đầu đoạn tiếp theo)
Đối với một thuộc tính, 1) sắp xếp theo thuộc tính 2) trong giá trị bằng nhau, trộn (trộn tất cả đỏ, trộn tất cả màu vàng, v.v.) 3) (Hơi ngẫu nhiên?) Thay thế thêm màu vào danh sách mới sao cho bạn cố giữ % được lấy của mỗi màu bằng nhau (ví dụ: nếu bạn có bốn màu đỏ và hai blues, bạn sẽ có màu đỏ và màu xanh dương, thì một màu đỏ khác sẽ mang nó đến 50%, v.v.). Sau đó, cho một tài sản thứ hai, bạn có thể ưu tiên lấy từ danh sách các màu sắc để thử và không làm cho chạy của tài sản thứ hai, một cái gì đó như thế. – Patashu
Vì vậy, bạn yêu cầu số lần xuất hiện của mỗi hoán vị bằng nhau? –
@gnibbler: Vâng, vì tôi nghĩ rằng làm cho vấn đề được xác định rõ hơn. Tôi đang cố gắng giữ cho những hạn chế về câu hỏi để nó vẫn là một brainteaser CompSci khó khăn nhưng hy vọng, chứ không chỉ là một mớ hỗn độn. Trong thế giới thực, nơi tôi là một trợ lý nghiên cứu trong một phòng thí nghiệm tâm lý, những ràng buộc thường là "bất cứ điều gì các giáo sư muốn ép vào thử nghiệm". – Marius