- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
如问题中所述,需要找到数组中 (i,j) 对的总数,使得
(1) **i
(2) **a[i]>a[j]**
其中 i 和 j 是数组的索引。没有空间限制。
câu hỏi của tôi là
1) Is there any approach which takes less than O(N^2) time?
2) if so what is least complexity ?
3) How do we prove that ?
我希望我对这个问题很清楚。
我的做法如下
做这道题的一种方法是使用暴力破解,这需要 O(N^2) 时间。
但我认为这个问题应该有一个更好的优化解决方案——至少O(NlogN)的解决方案。我的直觉原因如下
直觉 1) Để sắp xếp một mảng theo điều kiện thứ tự tăng dần, chúng ta có: for i
Bản năng thứ hai của tôi là:
Giả sử chúng ta có một mảng các phần tử như sau: 4,9,7,3,2,1,8,12
Chúng tôi tính toán các điều kiện trêntôi
Đối với phần tử 4, khi i=0 trỏ đến 4 thì các giá trị có thể có của j là 3,4,5. Vì a[0]>a[3],a[0]>a[4],a[0]> a[5] nên tổng số cặp (i,j) hiện tại của tôi là 3. Lần tới khi tôi tăng i(index) lên 1 thì các giá trị có thể có của j là 2,3,4,5,6. Nhưng chúng ta nên sử dụng thực tế là khi i=0 (khi a[i]=4), chúng ta đếm 3 phần tử nhỏ hơn a[i=0], do đó a[i=0] nhỏ hơn a[ i=1], vì vậy tôi không 'không so sánh 9 với 3,2,1 (loại bỏ các phép tính không cần thiết). Nếu loại bỏ được các phép tính không cần thiết thì chúng ta có thể giảm độ phức tạp xuống nhỏ hơn O(N^2), nếu không thì không có nghiệm nào nhỏ hơn O(N^2). Nhưng nếu có giải pháp thì chúng ta sẽ làm gì với nó. Tôi đã thử vẽ sơ đồ nhưng nỗ lực của tôi đều vô ích.
Cách 1) Để đạt được độ phức tạp O(nlogn), tôi nghĩ chúng ta cần điều chỉnh cách sắp xếp nhanh hoặc sắp xếp hợp nhất để có được giải pháp nhưng vấn đề ở đây là, nếu chúng ta sắp xếp mảng, chúng ta sẽ mất vị trí thực tế của các phần tử.
phương pháp 2) Để có được giải pháp trong thời gian O(NlogN), tôi nghĩ rằng bằng cách sử dụng cây, chúng tôi có thể nhận được giải pháp tối ưu hóa. Tôi không nhận được bất kỳ manh mối nào.
Cách 3) Nếu tồn tại bất kỳ thuật toán thời gian O(N) nào thì nó phải được băm. Nhưng trong trường hợp này, phép băm đơn giản không hoạt động.
Vì vậy, vui lòng cho tôi biết trực giác hoặc cách tiếp cận nào ở trên là đúng (và nếu đúng thì cách tiếp cận nào sẽ dẫn đến giải pháp tối ưu hóa và bằng cách nào).
câu trả lời hay nhất
Bạn có thể sử dụng thuật toán này để tính toán các cặp đảo ngược, tương tự như sắp xếp hợp nhất, như đã giải thích đây .
Ý tưởng là hợp nhất sắp xếp mảng trong khi đếm số lượng đảo ngược đã được thay đổi ở mỗi bước.
Một cách tiếp cận khác là sử dụng cây thống kê đơn hàng. Bạn chèn các phần tử của mảng vào cây này theo thứ tự và sau mỗi lần chèn xem có bao nhiêu phần tử lớn hơn phần tử được chèn trước nó.
Một giải pháp thay thế cho cây thống kê thứ tự là Danh sách bỏ qua có thể lập chỉ mục .
Độ phức tạp về thời gian của cả hai thuật toán là O(N log N).
Để có được số lần đảo ngược gần đúng, độ phức tạp về thời gian O(N) là có thể, với một số hạn chế. chúng ta có thể sửa đổiSắp xếp nhómSửa đổi sắp xếp hợp nhất theo cách tương tự.
Trong giai đoạn "phân tán" của sắp xếp nhóm, chúng ta nên ước tính số phần tử trong nhóm cho các phần tử lớn hơn trong khi chèn các phần tử vào cuối một nhóm nhất định (các phần tử trong mỗi nhóm giữ nguyên thứ tự ban đầu của chúng).
Trong giai đoạn "sắp xếp" của sắp xếp nhóm, chúng ta nên sửa đổi (theo cách tương tự) thuật toán sắp xếp (rất có thể là sắp xếp chèn). Trong khi chèn một phần tử vào vị trí thích hợp, chúng ta nên đếm xem nó đã bỏ qua bao nhiêu phần tử khác.
Về hạn chế, thuật toán chỉ hoạt động với các số (hoặc đối tượng, dễ chuyển đổi thành số) và chúng ta nên biết trước các số đó được phân phối như thế nào. Vì vậy, nếu chúng ta có một dãy số nguyên phân bố đồng đều, thuật toán này sẽ hoạt động tốt.
Về mảng - tìm tổng số cặp (i,j) trong một mảng thỏa mãn i
Trong C: int a[10]; printf("%p\n", a); printf("%p\n", &a[0]); Năng suất: 0x7fff5606c600 0x7fff5606c600
Tôi đã cố chạy vòng lặp này để thay đổi vị trí của các phần tử dựa trên một mảng nhưng tôi gặp phải lỗi sau. Không chắc chắn điều gì đã xảy ra. Bất kỳ ý tưởng hoặc suy nghĩ Cảm ơn! dân số var = [[98, 8, 45, 34, 56], [9, 1
Tôi đang cố gắng lấy một mảng các mảng Ruby và nhóm chúng lại để tính giá trị của chúng. Mảng có một tháng và giá trị bool: array = [["Tháng Sáu", sai], ["Tháng Sáu", sai], ["Tháng Sáu"
Vì vậy, mục tiêu của chúng ta là chia mảng thành các mảng con khi gặp một phần tử nhất định. Ví dụ bên dưới array.split("stop here") ["haii", "keep", "những phần tử này trong cùng một mảng bu
Trong câu hỏi này người ta đã trả lời rằng hai biểu thức bằng nhau, nhưng trong trường hợp này chúng tạo ra các kết quả khác nhau. Đối với điểm int[] nhất định, tại sao điều này lại xảy ra: Arrays.stream(scores) .forEac
Tôi nghĩ thứ tôi cần là một mảng băm, nhưng tôi không biết cách tạo ra nó. Perl có thể làm được điều đó không? Nếu vậy, mã sẽ trông như thế nào? Câu trả lời hay nhất perldoc perldsc là tài liệu hay để hiểu cấu trúc dữ liệu Perl. Giới thiệu về mảng
Tôi gặp phải vấn đề này, từ API tôi nhận được một JSON mở rộng chứa một đối tượng gọi là tọa độ là một mảng chứa một mảng o mảng. Để xem ví dụ này rõ ràng hơn: "tọa độ": [
Trong postgres (v 9.5, nếu điều đó quan trọng): tạo bảng json_test( id varchar NOT NULL, data jsonb NOT NULL, PRIM
Tôi nhận được kết quả tương tự khi sử dụng echo "${array[@]}" và echo "${array[*]}". Nếu tôi làm vậy: mkdir fakemusic; touch fakemusic/{Beatles,Sto
Tôi đang cố gắng tạo một mảng các đối tượng typealias - nhưng tôi nhận được lỗi biên dịch "Loại biểu thức không rõ ràng, không còn ngữ cảnh". Đây là mã của tôi: typealias TestClosure = ((tin nhắn: St
Nếu bạn tạo mảng một chiều trong Python, việc sử dụng gói NumPy có mang lại lợi ích gì không? Câu trả lời hay nhất Tất cả phụ thuộc vào những gì bạn định làm với mảng. Nếu tất cả những gì bạn làm là tạo các mảng có kiểu dữ liệu đơn giản và thực hiện I/O, thì mô-đun mảng sẽ hoạt động tốt. Khác
Tại sao tôi nhận được cấu trúc dữ liệu này khi tôi đẩy một mảng vào một mảng gồm các mảng chỉ có một mảng là phần tử duy nhất của nó? sử dụng v6; @d của tôi = ( [ 1 .. 3 ] ); @d.push( [ 4 .. 6 ] );
Ở Julia, tôi muốn chuyển đổi dữ liệu được xác định dưới dạng vectơ mảng 2D thành mảng ma trận 2D. Như được mô tả trong ví dụ sau, tôi muốn chuyển đổi dữ liệu s thành dữ liệu t, nhưng cho đến nay tôi vẫn chưa thành công. Tôi nên xử lý trường hợp này như thế nào? julia> s = [[1 2 3], [4
C không có từ khóa Elementsof để lấy số phần tử của mảng. Vì vậy, điều này thường được thay thế bằng cách tính toán sizeof(Array)/sizeof(Array[0]) nhưng điều này đòi hỏi phải lặp lại tên biến mảng. 1[&Array] trỏ đến điểm đầu tiên sau mảng
Vì vậy, giả sử tôi có một hàm (ngớ ngẩn) như thế này: function doSomething(input: number|string): boolean { if (input === 42 || in
Tôi có mảng sau: a = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] Tôi sử dụng nó cho một số hình ảnh như thế này Nội dung : 1 2 3 4 5 6 7 8 9 10
Tôi muốn biết sự khác biệt giữa .toList so với .to[List] trong một mảng. Tôi đã thực hiện thử nghiệm này trong spark-shell và kết quả không có gì khác biệt, nhưng tôi không biết nên sử dụng cái gì tốt hơn. Có lời khuyên nào không? scala> val l = Arr
Tôi gặp sự cố khi lấy chỉ mục phần tử hiện tại của nhiều phần tử của cùng một đối tượng: $b = "A","D","B","D","C","E","D", "F" $b | { $_ -contains "D" } Phiên bản thay thế: $b =
Tôi đang cố gắng thực thi các tùy chọn bằng cách sử dụng v-select từ API của mình, nơi tôi đặt dữ liệu vào một mảng. Mảng mà tôi nhận được từ API nên được chọn trong tìm kiếm vì nó
Câu hỏi này đã có câu trả lời ở đây: Chuỗi ký tự: con trỏ so với mảng char (1 câu trả lời) Đã đóng 4 tháng trước. Khi tôi thực thi mã tiếp theo int main() {
Tôi là một lập trình viên xuất sắc, rất giỏi!