Tôi đang sử dụng nth_element để có được một (xấp xỉ đúng) giá trị so với một phần trăm của một vector, như vậy:Tại sao std :: nth_element trả về các vectơ sắp xếp cho các vectơ đầu vào với N <33 phần tử?
double percentile(std::vector<double> &vectorIn, double percent)
{
std::nth_element(vectorIn.begin(), vectorIn.begin() + (percent*vectorIn.size())/100, vectorIn.end());
return vectorIn[(percent*vectorIn.size())/100];
}
tôi nhận thấy rằng cho độ dài vectorIn lên đến 32 yếu tố, các vector được hoàn toàn được sắp xếp. Bắt đầu từ 33 yếu tố, nó không bao giờ được sắp xếp (như mong đợi).
Không chắc chắn liệu điều này có quan trọng hay không nhưng chức năng nằm trong mã "Matlab-) mex C++" được biên dịch qua Matlab bằng cách sử dụng "Microsoft Windows SDK 7.1 (C++)".
EDIT:
Cũng xem biểu đồ sau đây của độ dài của các khối được sắp xếp dài nhất trong vectơ 1e5 truyền cho hàm (vectơ chứa các yếu tố ngẫu nhiên 1e4 và một phần trăm ngẫu nhiên đã được tính toán). Lưu ý đỉnh ở các giá trị rất nhỏ.
Các hàm thực hiện một loại phần để trả về giá trị mà bạn yêu cầu . Bao nhiêu một phần sắp xếp nó là tùy thuộc vào việc thực hiện. –
Không, không phải Mex có liên quan, nhưng câu hỏi hay. – chappjc
Sự tăng đột biến ở phía bên tay trái của lô đất của bạn trông rất giống với biểu đồ của độ dài của chuỗi liên tiếp dài nhất trong một vector ngẫu nhiên. Điều đó có thể tương ứng với phần nhỏ các giá trị phần trăm được chọn ngẫu nhiên, gần với phần cuối của vec-tơ mà chuỗi dài nhất nằm trong phần của vec-tơ không bao giờ được chạm vào bởi nth_vector. Nhưng đó chỉ là một phỏng đoán. – rici